背景:
由于平台要求兼容ie8,开发完成后想着在ie8上看看样式有没有变化,结果样式没问题,但是onmouseover之后的请求不见了,,,
初步怀疑:
- ie8不支持mouseover事件
- ajax没发出去
初步排查:
- mouseover 事件已经执行
- 抓包工具并没有抓到请求
$.ajax({
type: 'get',
url: "//XXX.xx.com/wxlsewm",
dataType: 'json',
success: function (data) {
console.log('啊啊啊啊啊啊啊,我进来了');
}
});
但这就是很普通的ajax啊,,泪奔。。。
再次怀疑:
是不是因为跨域 ?!
在将url换成同域名之后,发现确实在network里看到这条请求了,锁定问题,ie8、9跨域的时候请求会被屏蔽发不出去。
解决:
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);
}
});
}
}
亲测有效!!!
参考: https://stackoverflow.com/questions/3362474/jquery-ajax-fails-in-ie-on-cross-domain-calls
网友评论