Для IE8 и IE9 вам нужно использовать XDomainRequest (XDR). Если вы посмотрите ниже, вы увидите, что он в некотором роде похож на $ .ajax. Поскольку мое исследование помогло мне, я не могу заставить этот междоменный домен работать в IE6 & 7 (все еще ищем обходной путь для этого). XDR впервые появился в IE8 (он тоже в IE9). Итак, сначала я проверяю 6/7 и не делаю AJAX.
IE10 + может нормально работать с кросс-доменами, как и все другие браузеры (поздравляю Microsoft ... вздох)
После этого else if проверяет 'XDomainRequest в окне (очевидно, лучше, чем сниффинг в браузере) и выполняет JSON AJAX-запрос таким образом, в противном случае ELSE обычно делает это с $ .ajax.
Надеюсь, это поможет! У меня ушло навсегда, чтобы все это выяснить изначально
Информация об объекте XDomainRequest
// call with your url (with parameters)
// 2nd param is your callback function (which will be passed the json DATA back)
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);
}
});
}
}