Подтвердить что ты не робот

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

4b9b3361

Ответ 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...