记录:AJAX在IE8下的跨域问题

现在解决跨域问题可以用CORS标准。
CORS允许浏览器向跨源服务器,发出XMLHttpRequest请求。
操作很简单,只要在请求的地址服务的头信息中添加header("Access-Control-Allow-Origin:http://xxx.xxx.com") 即可。
但是在IE8竟然是不可行的。
IE8中需使用XDomainRequest (XDR)来跨域访问。
兼容代码如下:
`

    function crossDomainAjax (url,successCallback) {
        url = encodeURI(url);   
        // 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);
                }
            });
        }
    }

`

参考
http://stackoverflow.com/questions/3362474/jquery-ajax-fails-in-ie-on-cross-domain-calls#11267937
https://msdn.microsoft.com/library/cc288060(v=vs.85).aspx

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容