IE не запускает JQuery Ajax успеха - PullRequest
14 голосов
/ 23 апреля 2009

Я работаю над сценарием для асинхронной загрузки некоторых изображений с помощью jQuery.

Вот фрагмент кода функции, которая загружает изображения -

try{
    for(img in imgsArray){
        $.ajax({    
            async: false,
            type: "get",
            url:imgsArray[img],
            success:function(imgFile){
                alert("success");
                //do something useful
            },
            error:function(XMLHttpRequest,status,error){
                //do nothing
            }
        });//ajax
    } 
}
catch(e){
    //oops
}

Я протестировал это в Firefox, Webkit (Safari, Chrome), и он работает.

Изображения находятся в папке на сервере, и я использую jQuery 1.3.

есть идеи?

Ответы [ 12 ]

17 голосов
/ 01 июля 2011

Простым решением этой проблемы является предоставление параметра jQuery dataType : 'text' или dataType : 'xml' или dataType : 'json' или любого другого доступного типа ответа.

У меня была такая же проблема, но она работает нормально после задания параметра dataType в вызове .ajax.

IE на самом деле не интеллектуальный браузер, он не принимает строку значения по умолчанию.

Попробуй ... удачи.

11 голосов
/ 28 сентября 2011

Попробуйте установить для параметра cached значение false.

   $.ajax({        
            async: false,
            cache: false, 
            type: "get",
            url:imgsArray[img],
            success:function(imgFile){
                    alert("success");
                    //do something useful
                    },
                    error:function(XMLHttpRequest,status,error){
                    //do nothing
            }
    });//ajax
7 голосов
/ 13 июля 2009

У меня была похожая проблема - IE, по-видимому, вызывает сбой, если он не может проанализировать ответ как XML, даже если запрос был успешным, поэтому, если вы запрашиваете изображение, например, он вернет xhr.status 200 в блоке ошибок.

Я закрепил свою функциональность «успеха» в блоке успеха для FF и в блоке ошибок, заключенном в условное выражение «if (xhr.status == 200)».

4 голосов
/ 31 июля 2013

используйте следующий тег для поддержки кросс-браузера

$. Support.cors = true;

1 голос
/ 12 сентября 2013

установить 'cache: false' внутри .ajax config у меня работает:)

1 голос
/ 28 апреля 2009

В итоге мне пришлось создать отдельную функцию для браузеров IE.

Цель состояла в том, чтобы проверить изображение в таком месте, чтобы код выглядел примерно так -

    //get the images from the array
for(img in imgsArray){  

    if($.browser.msie){     
    /* DOM manipulation method */
    //IE has problems with ajax so try this instead
    //create a new image object with unique ID
    var testImg = $("<img/>");
    var imgID = "imgID"+img;

    //hide it..
    testImg .css({ "visibility":"hidden" });
    testImg .attr("src",imgsArray[img]);
    testImg .attr("id",imgID);

    //.. and insert it into the DOM or else test will always fail
    //because it does not exist as far as browser is concerned
    $("body").append(testImg );

    //test for image
    if(document.getElementById(imgID).width > 60){
        //do something useful
    }
}

Это не совсем ответ на мой вопрос, но это функциональное решение.

1 голос
/ 24 апреля 2009

В последние несколько дней у меня были похожие проблемы с IE и AJAX с моей веб-службой JSONP. Даже самая маленькая ошибка в вашем коде может привести к сбою в IE.

Вероятно, лучше всего отладить страницу в IE с помощью Visual Web Developer Express или Visual Studio. Вот учебник, как это сделать:

Как отлаживать JavaScript с помощью Visual Web Developer Express

Следуйте инструкциям и, возможно, разместите контрольные точки в начале запроса AJAX.

Попробуйте тоже самое:

  • Удаляя XMLHttpRequest из поля ошибки, я никогда не использовал его раньше, и мой код работает просто отлично;
  • Убедитесь, что вы используете последнюю версию jquery (1.3.2)?

Надеюсь, вы скоро заработаете!

0 голосов
/ 21 октября 2016

Я пришел к этому вопросу с похожими проблемами. И ответы выше исправили многие мои проблемы. Тем не менее, есть еще один трюк, который мне нужно сделать. Не используйте

$.ajax({...,
success: myfunc,...});

использовать

$.ajax({...,
success: myfunc(),...});
0 голосов
/ 09 июля 2014

Еще одна вещь, которую вы можете попробовать, очень похожая на решение от Джона Сондерса, - это попробовать "jsonp" в качестве типа контента вместо json - для ожидаемого ответа типа данных json. Мне пришлось попробовать это с IE, чтобы убрать мою ошибку, которая была нормальным кодом, работающим в любом другом браузере, кроме IE.

Вот мой код, который работал:

$.ajax({
    url: request_url,
    data: { var1: 'stuff' },
    dataType: "jsonp",
    type: "get",
    async: true,
    cache: false,
    success: function(collections) {
         // handle result
    }
});

Приветствия.

0 голосов
/ 21 сентября 2013

если ваш успех:

Success: function (data) {
                    if (data != null) {
                        alert(data);
                       ;
                    }
                },

изменить на это:

 success: function (data, textStatus, XMLHttpRequest) {
                alert(data.d);
            } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...