现在解决跨域问题可以用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
网友评论