Jquery $ .ajax не работает в IE при междоменных вызовах - PullRequest
64 голосов
/ 29 июля 2010

Я делаю междоменный запрос, используя $.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);
    }
});

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

Ответы [ 14 ]

0 голосов
/ 28 августа 2013

У меня была похожая проблема в IE9, когда некоторые вызовы CORS прерывались, а другие нет. Мое приложение также зависит от интерфейса обещаний, так что приведенные выше предложения XDomainRequest не были ТОЧНО тем, что мне было нужно, поэтому я добавил отложенный вариант в обход service.get для IE9. Надеюсь, это может пригодиться кому-то, кто сталкивался с этой проблемой. :

    get: function (url) {
        if ('XDomainRequest' in window && window.XDomainRequest !== null) {
            var deferred = $.Deferred();
            var xdr      = new XDomainRequest();

            xdr.open("get", url);

            xdr.onload = function() {
              json = xdr.responseText;
              parsed_json = $.parseJSON(json);
              deferred.resolve(parsed_json);
            }

            xdr.send();
            return deferred;
        } else {
            return $.ajax({
                url: url,
                type: 'GET',
                dataType: 'json',
                crossDomain: true
            });
        }
    }
0 голосов
/ 21 августа 2013

У меня такая же проблема в IE, я решил ее, заменив:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>

Для

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

Итак, обновите вашу версию jquery.

0 голосов
/ 10 августа 2010

Microsoft всегда пашет саморазрушающую (по крайней мере, в IE) борозду:

http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/

CORS работает с XDomainRequest в IE8.Но IE 8 не поддерживает предварительные или учетные запросы, в то время как Firefox 3.5+, Safari 4+ и Chrome поддерживают такие запросы.

0 голосов
/ 29 июля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...