2010-06-23 26 views
16

Tengo una función jquery que hace una llamada ajax a un método webservice en el servidor web, el método devuelve una tabla html con datos. Estoy usando .html() para representar los valores devueltos en div. Esto funciona en Firefox, Chrome, Safari, pero no funciona en IE8jquery .html() no funciona en 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; 
    } 
}); 

La línea $ ("# dvProudctInstruction") html (data.d [1])., funciona en todos los navegadores excepto en IE8.

Cualquier ayuda sobre esto será muy apreciada.

Respuesta

0

¿Ha intentado establecer data.d[1] en una variable y luego agregarlo?

Por ejemplo:

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

Ya se trate de html() que no está funcionando o su otra cosa, lo comprueba en primer lugar. Ponga una alerta y vea si obtiene html correcto o esperado o no.

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

más probable es que el HTML que entra data.d [1] contiene errores e IE no es capaz de resolverlo.

10

Se podría alertar a su respuesta antes de asignarlo html()

O

Usted podría utilizar innerHTML propiedad en lugar html() de jQuery (aunque es lo mismo)

Y es posible que desee comprobar this link

+3

+1 para el enlace. funcionó en mi caso para el problema con IE8 (¡el problema resultó ser un marcado incorrecto!). dice: _En IE resulta que el atributo jQuery .html() no reemplazará el contenido del primer elemento coincidente, a menos que el nuevo HTML sea válido_ – javigzz

0

Solo un presentimiento, pero ¿está seguro de que ingresa al bloque if? Sólo estoy pidiendo haber tropezado en cierto vs "verdadero" un par de veces a mí mismo ...

Probar:

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

Puede que no sea nada, pero al menos se eliminaría la posibilidad de que se había simplemente nunca ejecute la línea de código que ha resaltado.

8

Parece que IE8 tiene problemas para insertar largas cadenas de texto con jQuery's html(), lo que hace que el contenido del div esté completamente en blanco. Acabo de probarlo con una cuerda muy larga y una que contiene solo 'blah', y eso hizo toda la diferencia.

Así que si esperas tiradas de texto muy grandes (como 2k + caracteres), ve al innerHTML nativo. No hice ninguna investigación más, por lo que no sé cuál es la longitud máxima de una cadena para pasar a través de html() en IE8.

+2

Esto está bien, exactamente. Bicho raro. –

+0

¡Esto me salvó la vida, gracias! – user2968356

0

he respondido a este problema en link sólo tiene que cambiar su código para ser así

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

Sé que es algo de una respuesta tardía; pero también podrías arreglarlo con un bloque try/catch. A veces es posible que no tenga todo el control sobre el contenido.

De esta forma, mantiene el código original funcionando para los nuevos navegadores, mientras que catch ejecuta el innerHTML para IE8.

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

Espero que esto ayude a alguien!

Cuestiones relacionadas