.load () в jQuery не работает в IE - но отлично работает в Firefox, Chrome и Safari - PullRequest
45 голосов
/ 30 июня 2009

Я бью головой об стену об этой ...

У меня есть следующий код:

$("#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

Ответы [ 15 ]

48 голосов
/ 20 октября 2009

У меня такая же проблема. Многие сайты, которые я нашел, предполагают, что 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.

16 голосов
/ 24 декабря 2012

$. AjaxSetup ({cache: false});

Это очистит кеш в IE и .load () будет работать. Я попробовал это.

13 голосов
/ 27 декабря 2010

Если загружаемый вами HTML-код поврежден, функция jQuery .load () не будет работать в IE. Это была проблема для меня. После того, как я исправил HTML, все отлично работало и в IE!

6 голосов
/ 06 июля 2011

Я столкнулся с этой проблемой и целый день чесал голову. Однако, наконец, нашел обходной путь и понял, что такое странный 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 = data; перерывы из-за них. Добавляя кавычки, мы конвертируем их в строку, но добавление html добавляет дополнительные кавычки, поэтому я снова избавляюсь от кавычек.

Мораль: => IE отстой .. Больше ничего ..

4 голосов
/ 02 июля 2012

Я нашел, что этот обходной путь работает:

$.ajax("loaded.html", {
    cache: false,
    success: function(data, textStatus, jqXHR) {
        $("#content-1").html(data);
    },
    dataType:"html"
});

где:

  • "loaded.html "- это URL-адрес файла для загрузки.
  • $ ("# content-1") - это элемент, который будет содержать загруженные данные (и сценарии).
4 голосов
/ 09 июня 2011

Я обнаружил, что функция .load () не очень хорошо работает с IE, но использование $ .get () вместо этого работает отлично, например,

var dummy = new Date().getTime();
$.get("home.html" + dummy, function(data) {
   $(".islice").html(data);
});
3 голосов
/ 29 августа 2012

Я думаю, что проблема возникла из-за неоднозначного кодирования. Попробуйте явно указать кодировку ответа (то есть кодировку в заголовке HTTP), например:

<meta charset="utf-8">
3 голосов
/ 19 марта 2012

У меня была такая же проблема с IE9.

Все запросы ajax по умолчанию умирают без уведомления. Используя http://api.jquery.com/ajaxError/, я смог определить тип ошибки, зарегистрировав сообщение об исключении: Ошибка с кодом c00ce56e .

Оказывается, это означает, что ответ не передается в кодировке utf-8 , как и должно быть в ответ на запрос ajax.

Оказывается, у меня была ошибка ввода в header('Content-type: text/html; charset=utf-8');

2 голосов
/ 05 ноября 2012

Хорошо, ребята ... У меня была такая же проблема с то есть 8 и старше. Это мое решение, надеюсь, оно кому-нибудь поможет:

1) Сначала довольно сложно отлаживать ajax в IE. Зачем? Консоль не на высоте, но есть еще одна большая проблема - кеширование. При первой загрузке что-то не так, оно остается в кеше. Чем вы потратите 2 часа на решение проблемы, увидев тот же результат (когда вы делаете это в первый раз). Благодаря этой статье (и обсуждению): http://zacster.blogspot.cz/2008/10/jquery-ie7-load-url-problem.html Я настроил свои вызовы ajax следующим образом:

$ (контейнер) .load (ссылка + '? Random =' + Math.random () * 99999 + '.post-list li', function () { // делать что-то }

Случайный URL отлично работает

2) @ Нено прав! IE есть проблемы с ошибками в HTML. Подтвердите загрузку HTML http://validator.w3.org/

2 голосов
/ 30 июня 2009

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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 .

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