jquery.html() не работает на ie8

У меня есть функция jquery, которая выполняет ajax-вызов метода веб-службы на веб-сервере, метод возвращает таблицу html с данными. Я использую .html() для отображения возвращаемых значений в div. Это работает в Firefox, Chrome, Safari, но не работает в IE8.

$.ajax({
    type: "POST",
    url: "./../WebAjaxCalls.asmx/GetProductInstruction",
    data: "{'ProductID':'" + $("#txtProductID").val()  + "'}",
    success: function(data) {
        if (data.d[0] == "true") {
            **$("#dvProudctInstruction").html(data.d[1]);** 
        }
    },
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    error: function(e, textStatus, errorThrown) {
        bReturn = false;
    }
});  

Строка $("#dvProudctInstruction").html(data.d[1]); работает во всех браузерах, кроме IE8.

Любая помощь в этом будет высоко оценена.


person jack    schedule 23.06.2010    source источник


Ответы (7)


Вы можете предупредить свой ответ, прежде чем назначать его html()

OR

Вы можете использовать свойство innerHTML вместо html() jquery (хотя это то же самое)

И вы можете проверить эту ссылку

person Nilesh Thakkar    schedule 17.09.2011
comment
+1 за ссылку. в моем случае сработало при проблеме с IE8 (проблема оказалась в плохой разметке!). он говорит: В IE оказывается, что атрибут jQuery .html() не заменит содержимое первого совпадающего элемента, если новый HTML не является допустимым - person javigzz; 07.05.2013

Кажется, у IE8 есть проблемы со вставкой длинных строк текста с помощью jQuery html(), что делает содержимое div полностью пустым. Просто попробовал это как с очень длинной строкой, так и с одной, содержащей просто «бла», и это имело все значение.

Поэтому, если вы ожидаете очень больших кусков текста (например, 2000+ символов), используйте собственный innerHTML. Дальнейших исследований не проводил, поэтому не знаю, какова максимальная длина строки, которую нужно передать через html() в IE8.

person DavidKunz    schedule 22.03.2012

Вы пытались установить data.d[1] в переменную, а затем добавить ее?

Например:

if (data.d[0] == "true") {
     var results = data.d[1];
     $("#dvProudctInstruction").html(results);
}
person Thomas    schedule 09.07.2011

Независимо от того, не работает ли это .html() или что-то еще, сначала проверьте его. Поместите предупреждение и посмотрите, получите ли вы правильный, ожидаемый HTML или нет.

alert(data.d[1]);
$("#dvProudctInstruction").html(data.d[1]);

Скорее всего, html, поступающий в data.d[1], содержит ошибку, и IE не может ее решить.

person kaps    schedule 17.09.2011

Просто интуиция, но уверены ли вы, что вообще входите в блок if? Я просто спрашиваю, сам несколько раз сталкивался с правдой против "правды"...

Пытаться:

success: function(data) {
    alert('outside of if');
    if (data.d[0] == "true") {
        alert(data.d[1]);
        $("#dvProudctInstruction").html(data.d[1]);
    }
}

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

person Jørgen Emerslund    schedule 29.12.2011

я ответил на эту проблему на link вам просто нужно изменить свой код, чтобы он был таким

$("#dvProudctInstruction").html(data.d[1].toString());
person mahmoodels    schedule 25.05.2014

Я знаю, что это немного запоздалый ответ; но вы также можете исправить это с помощью блока try/catch. Иногда у вас может не быть полного контроля над контентом.

Таким образом, исходный код будет работать для новых браузеров, в то время как catch запустит innerHTML для IE8.

try {
    //new browsers
    $('#dvProudctInstruction').html(data.d[1]);
} catch (e) {
    //IE8
    $('#dvProudctInstruction').innerHTML = data.d[1];
}

Надеюсь, это поможет кому-то!

person Chris Laarman    schedule 11.12.2014