jq如何实现ie 8 下跨域的?用原生该怎么写呢?

小弟惭愧,翻了半天源码,越看越迷糊,跪拜各位大神:
搜不到XDomainRequest,但是用了ActiveXObject("Microsoft.XMLHTTP");
那么jq是怎么实现ie8跨域的啊?
以及jq是怎么处理的header?
原生该怎么实现?

阅读 3.2k
3 个回答

给你一个直接用的,付上传送门

crossDomainAjax('http://www.somecrossdomaincall.com/?blah=123', function (data) {
    // success logic
});

function crossDomainAjax (url, successCallback) {

    // IE8 & 9 only Cross domain JSON GET request
    if ('XDomainRequest' in window && window.XDomainRequest !== null) {

        var xdr = new XDomainRequest(); // Use Microsoft XDR
        xdr.open('get', url);
        xdr.onload = function () {
            var dom  = new ActiveXObject('Microsoft.XMLDOM'),
                JSON = $.parseJSON(xdr.responseText);

            dom.async = false;

            if (JSON == null || typeof (JSON) == 'undefined') {
                JSON = $.parseJSON(data.firstChild.textContent);
            }

            successCallback(JSON); // internal function
        };

        xdr.onerror = function() {
            _result = false;  
        };

        xdr.send();
    } 

    // IE7 and lower can't do cross domain
    else if (navigator.userAgent.indexOf('MSIE') != -1 &&
             parseInt(navigator.userAgent.match(/MSIE ([\d.]+)/)[1], 10) < 8) {
       return false;
    }    

    // Do normal jQuery AJAX for everything else          
    else {
        $.ajax({
            url: url,
            cache: false,
            dataType: 'json',
            type: 'GET',
            async: false, // must be set to false
            success: function (data, success) {
                successCallback(data);
            }
        });
    }
}

跨域

问题问的有点宽泛,jq怎么实现IE8的跨域要看源码
你可以简单看一下ajaxTransport方法,jq通过这个方法封装了jsonp跨域和CORS跨域两种方式
header处理就比较简单了,其实就是setRequestHeader和getAllResponseHeaders

跨域就是自己拼一个script的标签,src就是你要跨域提交的地址,传一个callback的名字,那边拼好。没了。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题