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.