2010-06-23 23 views
16

Ich habe eine jquery Funktion, die einen Ajax-Aufruf an eine Webservice-Methode auf dem Webserver macht, die Methode gibt eine HTML-Tabelle mit Daten zurück. Ich verwende .html(), um die Rückgabewerte auf div zu rendern. Dies funktioniert in Firefox, Chrome, Safari, funktioniert aber nicht auf IE8jquery .html() funktioniert nicht auf 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; 
    } 
}); 

Die Linie $ ("# dvProudctInstruction") html (data.d [1]). funktioniert auf allen Browsern außer IE8.

Jede Hilfe zu diesem wird sehr geschätzt.

Antwort

0

Haben Sie versucht, data.d[1] auf eine Variable einzustellen und dann hinzuzufügen?

Beispiel:

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

Ob .html(), die nicht funktioniert oder es ist etwas anderes ist, überprüfen Sie es zuerst. Setzen Sie eine Warnung und sehen Sie, ob Sie korrektes, erwartetes HTML erhalten oder nicht.

Höchstwahrscheinlich enthält der HTML-Code data.d [1] einen Fehler und der IE kann ihn nicht beheben.

10

Sie könnten Ihre Antwort warnen, bevor es die Zuordnung html()

OR

Sie könnten innerHTML- verwenden Eigenschaft stattdessen html() von jQuery (obwohl es gleiche ist)

Und Sie könnten überprüfen möchten this link

+3

+1 für den Link. hat in meinem Fall für das Problem mit IE8 gearbeitet (das Problem wurde zu einem schlechten Markup!). es sagt: _In IE stellt sich heraus, dass das jQuery .html() - Attribut Inhalt des ersten übereinstimmenden Elements nicht ersetzen wird, es sei denn, das neue HTML ist gültig_ – javigzz

0

Nur ein Bauchgefühl, aber sind Sie sicher, dass Sie den if-Block überhaupt eingeben? Ich frage nur mal selbst ...

Try vs „true“ ein paar in wahr gestolpert zu haben:

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

vielleicht nicht alles, aber zumindest würden Sie die Möglichkeit auszuschließen, dass du würdest Führen Sie die von Ihnen markierte Codezeile niemals aus.

8

Es scheint, IE8 hat Probleme beim Einfügen langer Textzeichenfolgen mit jQuery's html(), so dass der Inhalt der div nur komplett leer ist. Ich probierte es mit einer sehr langen Saite und einer, die nur 'blah' enthielt, und das machte den Unterschied.

Also, wenn Sie sehr große chucks Text erwarten (wie 2k + Zeichen), gehen Sie für die native innerHTML. Ich habe keine weiteren Nachforschungen angestellt, daher weiß ich nicht, wie groß die maximale Länge einer Zeichenfolge ist, die in IE8 durch html() übergeben wird.

+2

Das ist genau richtig. Sonderbarer Fehler. –

+0

Das hat mein Leben gerettet, danke !! – user2968356

0

Ich habe dieses Problem beantworten auf link Sie müssen nur Ihren Code ändern wie diese

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

ich, es ist etwas eine späte Antwort kennen zu sein; aber Sie könnten es auch mit einem try/catch-Block beheben. Manchmal haben Sie möglicherweise nicht die volle Kontrolle über den Inhalt.

Auf diese Weise behalten Sie den ursprünglichen Code für die neuen Browser, während der Catch das innerHTML für IE8 ausführt.

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

Hoffe, das hilft jemandem!

Verwandte Themen