Я делаю перекрестное доменное использование запроса $.ajax
. Это работает над Firefox и Chrome, но не выпускает запрос к IE 7 или 8. Кто-либо может сказать мне что случилось со следующим?
Allow-access-control-origin
заголовок на моем сайте. (Без тех Chrome и Firefox не выполняли успешные запросы.)$.ajax({
type: 'GET',
url: "http://anotherdomain.com/Service/GetControl?id=" + zoneID,
cache: false,
contentType: "application/x-www-form-urlencoded",
async: false,
beforeSend: function (request) {
//alert('before send');
//request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
//request.setRequestHeader("X-PINGOTHER", "pingpong");
} ,
success: function (data, status) {
//alert("Data returned :" + data);
//alert("Status :" + status);
if (status == "success" && data != "")
$("#" + div.id).append(data);
else
$("#" + div.id).attr("style", "display:none;");
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
alert(errorThrown);
}
});
Я попробовал различные подсказки, существующие на нескольких сайтах, но никакой удаче все же.
Не могли бы вы проверить, связана ли проблема с IE в том, что не определены зоны безопасности для разрешения междоменных запросов? См. Эту страницу Microsoft для объяснения.
OTOH, на этой странице упоминается, что IE7 и более ранняя версия не могут выполнять междоменные вызовы, но IE8 может использовать другой объект, отличный от XMLHttpRequest, который использует JQuery.Не могли бы вы проверить, работает ли XDomainRequest?
РЕДАКТИРОВАТЬ (2013-08-22)
Вторая ссылка не работает, поэтому я пишу здесь некоторую информацию, взятую с машины обратного пути :
XDomainRequest Поддерживается: IE8
Вместо того, чтобы реализовывать CORS-версию XMLHttpRequest, команда IE разработала собственный объект, названный XDomainRequest. Использование XDomainRequest было упрощено по сравнению с XMLHttpRequest, поскольку было создано больше событий (причем onload, возможно, является наиболее важным).
Эта реализация имеет несколько ограничений. Например, файлы cookie не отправляются при использовании этого объекта, что может быть головной болью для сеансов на основе файлов cookie на стороне сервера. Кроме того, ContentType не может быть установлен, что создает проблему для ASP.NET и, возможно, других языков на стороне сервера (см. http://www.actionmonitor.co.uk/NewsItem.aspx?id=5 ) .
var xdr = new XDomainRequest (); xdr.onload = функция () {предупреждение («ГОТОВО»); }; xdr.open ("ПОЛУЧИТЬ", "script.html"); xdr.send ();
Трудно сказать из-за отсутствия форматирования в вопросе, но я думаю, что вижу две проблемы с вызовом ajax.
1) application/x-www-form-urlencoded для contentType должен быть в кавычках
2) должна быть запятая, разделяющая параметры contentType и async.
Microsoft всегда вспахивает борозду с саморазрушением (по крайней мере, в IE):
http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/
CORS работает с XDomainRequest в IE8. Но IE 8 не поддерживает Preflighted или Credentialed Requests, в то время как Firefox 3.5+, Safari 4+ и Chrome поддерживают такие запросы.