IE не запускает jQuery Успех Ajax

Я работаю над script для загрузки некоторых асинхронных изображений с помощью 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.

любые идеи?

Ответы

Ответ 1

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

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

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

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

Ответ 2

Попробуйте установить для кешированной опции значение 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

Ответ 3

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

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

Ответ 4

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

$. support.cors = true;

Ответ 5

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

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

Отладка JavaScript с помощью Visual Web Developer Express

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

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

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

Надеюсь, вы скоро это сделаете!

Ответ 6

В конце концов мне пришлось создать отдельную функцию для браузеров 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
    }
}

На самом деле это не ответ на мой вопрос, но это функциональная работа.

Ответ 7

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

Ответ 8

Я бы посоветовал использовать Charles Proxy, чтобы узнать, что происходит - т.е. является ли вообще вообще запрос? Какой ответ?

Кроме того, я думаю, что может быть какое-то исключение, поэтому почему бы вам не добавить некоторые предупреждения в разделе Catch, чтобы узнать, что происходит?

Ответ 9

если вы достигли успеха:

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

измените для этого:

 success: function (data, textStatus, XMLHttpRequest) {
                alert(data.d);
            } 

Ответ 10

Еще одна вещь, которую вы можете попробовать, очень похожая на решение John Saunders, - это попробовать "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
    }
});

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

Ответ 11

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

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

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

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

Ответ 12

Если вы используете проверку ввода, если у вас есть один выбор как "выбранный", если вы не передадите этот параметр функции ajax.