IE八、IE9不支持CORS跨域該如何解決?

剛開始,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

clipboard.png

根據後臺描述:說是要搜索整個發送過去的文檔才能解析到攜帶的參數,不採用這個解決方案。因而前端退一步,當遇到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

相關文章
相關標籤/搜索