Мне потребовались часы, чтобы понять это, так что, надеюсь, я смогу спасти кого-то еще от головной боли.
Как отмечалось в другом месте, IE не использует XMLHttpRequest.
Однако многие решения, размещенные в других местах, не работают для меня.
Я пытался:
jQuery.support.cors = true;
Но это, похоже, ничего не делает.
JSONP работал бы, если бы это была одноэлементная функция. Но я работаю внутри относительно сложного объекта, которому нужно несколько экземпляров на одной странице, но обратные вызовы действительно работают только в глобальном пространстве имен, и я сталкиваюсь с коллизиями ... очень уродливыми коллизиями.
$. GetScript не будет работать для меня, потому что мне нужно на самом деле массировать возвращаемые данные json. И хотя dataType «script» не выдает ошибку доступа XDomain, он также не возвращает фактические данные моей функции обратного вызова .success.
$. GetJSON не работает для IE8 - он выдает ошибку «Отказано в доступе». В основном сталкивается с проблемами CORS. И ничто на глобальном уровне, кажется, не помогает.
Итак, я нашел следующие работы:
$.ajax({
url : remote_cross_domain_non_local_url,
dataType : 'jsonp'
})
.success( function(data){ dosomethingwithdata(data); } );
Это своего рода хак, потому что я указываю тип данных jsonp, хотя в возвращаемых данных нет функции-обертки. Но чтобы обойти проблемы XDomain с IE, мы должны обмануть его, думая, что мы получаем скрипт JSONP.