JQuery.load() не работает в IE, но отлично работает в Firefox, Chrome и Safari
Я ударяю головой о стену против этого...
У меня есть следующий код:
$("#home").click(function(e) {
$(".tabs").attr("src","tabs-home.gif");
$(".islice").hide('fast');
$(".islice").load("home.html");
$(".islice").show('fast');
e.preventDefault();
});
Он отлично работает в Firefox, Safari и Chrome, но IE работает только с attr() и не выполняет ни скрытие/показ, ни загрузку. Я попытался удалить скрытие и показать, и он все еще не работает.
IE не сообщает о синтаксических ошибках даже с DebugBar. Что я могу делать неправильно?
Вы можете увидеть сайт в http://www.brick-n-mortar.com
Ответы
Ответ 1
У меня такая же проблема. Многие сайты, которые я нашел, предположили, что IE может кэшировать ваш код и предложить добавить код в
$("#home").click(function(e) {
$(".tabs").attr("src","tabs-home.gif");
$(".islice").hide('fast');
$(".islice").load("home.html?" + new Date().getTime() );
$(".islice").show('fast');
e.preventDefault();
});
Это должно гарантировать, что IE не кэшируется.
Подробнее см. http://zacster.blogspot.com/2008/10/jquery-ie7-load-url-problem.html.
Ответ 2
$. ajaxSetup ({cache: false});
Это очистит кеш в IE и будет работать .load(). Я пробовал.
Ответ 3
Если HTML, который вы загружаете, сломан, jQuery.load() не будет работать в IE.
Это была проблема для меня. После того, как я исправил HTML, все отлично работало и в IE!
Ответ 4
Я столкнулся с этой проблемой и целый день царапал себе голову. Однако, наконец, нашел работу и понял, что такое weirdo IE.
Прежде всего,
$(".islice").load("home.html");
не будет работать, как бы мы ни старались. Вместо этого мы будем использовать
$.get("home.html", function (data) ....... );
Я объясню ".....", потому что обычный
$.get("home.html", function (data) { $(".islice").html(data); }); // doesn't work
не будет работать.
Вместо
$.get("home.html", function (data) {
data = '"' + data + '"';
$(".islice").html(data);
var newHTML = $('.islice').html();
$('.islice').html(newHTML.substr(1,newHTML.length-2));
}); // works
будет работать.
Объяснение: = > данные могут иметь новые строковые символы. поэтому установка innerHTML= данных; ломается из-за них. Добавляя кавычки, мы конвертируем его в строку, но при этом html добавляет дополнительные кавычки, чтобы снова избавиться от котировок.
Мораль: = > ИСО отстой. Ничего другого..
Ответ 5
Я обнаружил, что функция .load() не очень хорошо работает с IE, но с использованием $.get() вместо этого работает отлично, например.
var dummy = new Date().getTime();
$.get("home.html" + dummy, function(data) {
$(".islice").html(data);
});
Ответ 6
Я нашел, что это обходное решение работает:
$.ajax("loaded.html", {
cache: false,
success: function(data, textStatus, jqXHR) {
$("#content-1").html(data);
},
dataType:"html"
});
где:
- "loaded.html" - это URL-адрес загружаемого файла.
- $( "# content-1" ) - это элемент, который будет содержать загруженные данные (и скрипты).
Ответ 7
У меня была такая же проблема с IE9.
Все запросы ajax по умолчанию умирают молча. Используя http://api.jquery.com/ajaxError/, я смог определить тип ошибки, зарегистрировав сообщение об ошибке: Ошибка с кодом c00ce56e.
Оказывается, это означает, что ответ не передается utf-8 encoded, как и должно быть в ответ на запрос ajax.
Оказывается, у меня была ошибка ввода в header('Content-type: text/html; charset=utf-8');
Ответ 8
Я думаю, проблема возникла из-за неоднозначной кодировки. Попробуйте явно указать кодировку ответа (то есть кодировку в заголовке HTTP), например:
<meta charset="utf-8">
Ответ 9
e.preventDefault()
не будет иметь никакого значения в IE - вам нужно будет использовать return false;
, чтобы это не происходило:
$("#home").click(function(e) {
$(".tabs").attr("src","tabs-home.gif");
$(".islice").hide('fast');
$(".islice").load("home.html");
$(".islice").show('fast');
e.preventDefault();
return false;
});
Чтобы отладить это подробно, посмотрите Firebug.
Ответ 10
Хорошо, ребята... У меня была такая же проблема с тобой 8 и старше. Это мое решение, надеюсь, что это поможет кому-то:
1) Сначала довольно сложно отладить ajax в IE. Зачем? Консоль не соответствует значению, но есть еще одна проблема - кэширование. В первый раз, когда вы загружаете что-то неправильно, он остается в кеше. Чем вы тратите 2 часа на исправление проблемы, видя тот же результат (когда вы делаете это в первый раз). Благодаря этой статье (и дискусии): http://zacster.blogspot.cz/2008/10/jquery-ie7-load-url-problem.html Я настроил свои вызовы ajax следующим образом:
$(container).load(link + '? random =' + Math.random() * 99999 + '.post-list li', function() { // Делаем что-то
}
Случайный URL-адрес работает отлично
2) @Neno прав! IE имеет проблемы с ошибками в HTML. Подтвердите свою загрузку HTML http://validator.w3.org/
Ответ 11
Чтобы предотвратить использование IE для этого, добавьте к нему параметр math.random(), чтобы он не использовал этот незадачный кеш...
Ответ 12
У меня была аналогичная проблема, и я смог заставить ее работать следующим образом:
.load()
и .html()
не очень хорошо работают в IE; особенно если у вас нет допустимого HTML.
$("#home").click(function(e) {
$(".tabs").attr("src","tabs-home.gif");
$(".islice").hide('fast');
$.ajax({
url: "home.html",
success: function(data, textStatus, xhr) {
$(".islice")[0].innerHTML = data;
}
});
$(".islice").show('fast');
e.preventDefault();
});
Ответ 13
Вы .load()
входите в <table>
?
Хм... Может быть, подтолкнуть класс .islice
до уровня, в <td>
или, возможно, <div>
между...
(Не то, чтобы это обязательно проблема, но это возможность...)
Ответ 14
У меня такая же проблема, для меня работа добавляет в голову
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
Ответ 15
Если загрузка с PHP, reset ваши значения массива. Например:
$result = ''; // do this
$row = ''; // do this
$data = ''; // IMPORTANT Kills odd behavior CACHE FOR IE
$result = mysql_query("your sql here");
while ($row = mysql_fetch_array($result)){
$data[] = $row ..... blah blah blah...