$ jQuery .ajax перестал работать в IE на междоменных вызовах

Я делаю перекрестное доменное использование запроса $.ajax. Это работает над Firefox и Chrome, но не выпускает запрос к IE 7 или 8. Кто-либо может сказать мне что случилось со следующим?

  1. Я использовал JSON и JSONP (который я прекратил использовать, из-за некоторых пользовательских ограничений).
  2. Я уже использую Allow-access-control-origin заголовок на моем сайте. (Без тех Chrome и Firefox не выполняли успешные запросы.)
  3. Я уже попробовал https://developer.mozilla.org/en/http_access_control

Код:

$.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);
    }
});

Я попробовал различные подсказки, существующие на нескольких сайтах, но никакой удаче все же.

64
задан halfer 23 August 2017 в 15:47
поделиться

3 ответа

Не могли бы вы проверить, связана ли проблема с 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 ();
32
ответ дан 24 November 2019 в 15:44
поделиться

Трудно сказать из-за отсутствия форматирования в вопросе, но я думаю, что вижу две проблемы с вызовом ajax.

1) application/x-www-form-urlencoded для contentType должен быть в кавычках

2) должна быть запятая, разделяющая параметры contentType и async.

-1
ответ дан 24 November 2019 в 15:44
поделиться

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 поддерживают такие запросы.

0
ответ дан 24 November 2019 в 15:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: