剛開始,Post請求如如下例子,在除IE9如下的主流瀏覽器是正常,沒有報錯等啥的。而後一到IE八、9就沒有反應了。
直接不響應,我剛開始第一反應就是禁用了腳本。後來才知道IE八、9的兼容性問題。前端
var _Url = 'http://baidu.com/login'; var _Data = {user:'xiaomi',password:'123456'}; $.post( _Url , _Data , function(res) { console.log(res) } );
查詢了一下資料,jQuery與插件 jQuery-ajaxTransport-XDomainRequest 相互配合就能夠解決兼容性問題了。注意:使用了這個插件就不可以添加自定義的header信息了,只支持 contentType: 'text/plain',異步。根據其文檔編寫成以下:git
var _Url = 'http://baidu.com/login'; var _Data = {user:'xiaomi',password:'123456'}; // GET $.getJSON(_Url).done(function(res) { console.log(res) }); // POST $.ajax({ url: _Url, data: _Data , contentType: 'text/plain', type: 'POST', dataType: 'json' }).done(function(res) { console.log(res) })
我覺得醬紫處理就行了,由於界面有反應了。報了後臺返回的msg:帳號或者密碼錯誤。然然後來我輸入了正確的帳號及對應的密碼,仍是這個錯誤就感受不對了,GET請求沒有問題,可是POST請求還有點小BUG。後來實在找不出緣由,就叫後臺看了一下個人請求,發現沒有後臺沒有接收到攜帶過去的參數。可是看了調試頁面確實發送過去了。github
根據後臺描述:說是要搜索整個發送過去的文檔才能解析到攜帶的參數,不採用這個解決方案。因而前端退一步,當遇到IE八、IE9瀏覽器時,攜帶參數放置地址攜帶給後臺。_Url + '?user=test10&password=123456'。ajax
var _Url = 'http://baidu.com/login'; var _Data = {user:'xiaomi',password:'123456'}; if (window.XDomainRequest) _Url = _Url + '?' + toQueryString(_Data); $.ajax({ url: _Url, data: _Data, type: _Method, dataType: 'json' }).done(function (oResult) { console.log(oResult) }) //對象轉換爲URL查詢參數 function toQueryPair(key, value) { if (typeof value === 'undefined') return key; return key + '=' + encodeURIComponent(value === null ? '' : String(value)); } //對象轉換爲URL查詢參數 function toQueryString(obj) { var ret = []; for (var key in obj) { key = encodeURIComponent(key); var values = obj[key]; if (values && values.constructor == Array) { //數組 var queryValues = []; for (var i = 0, len = values.length, value; i < len; i++) { value = values[i]; queryValues.push(toQueryPair(key, value)); } ret = ret.concat(queryValues); } else { //字符串 ret.push(toQueryPair(key, values)); } } return ret.join('&'); }
醬紫能夠解決問題了。
歡迎觀看不按期更新的技術貼。O(∩_∩)O哈哈~
若有文章存在BUG,歡迎更正哦!json