2010-06-23 7 views
16

J'ai une fonction jquery qui effectue un appel ajax à une méthode webservice sur le serveur web, la méthode renvoie une table html avec des données. J'utilise .html() pour afficher les valeurs de retour sur div. Cela fonctionne dans Firefox, Chrome, Safari, mais ne fonctionne pas sur IE8jquery .html() ne fonctionne pas sur 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 ligne $ ("# dvProudctInstruction") html (data.d [1]). fonctionne sur tous les navigateurs sauf IE8.

Toute aide à ce sujet sera grandement appréciée.

Répondre

0

Avez-vous essayé de définir data.d[1] dans une variable, puis de l'ajouter?

Par exemple:

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

Que son .html() qui ne fonctionne pas ou son autre chose, vérifier d'abord. Mettre une alerte et voir si vous obtenez correct, attendu html ou non. Il est fort probable que le code html provenant de data.d [1] contienne des erreurs et que IE ne soit pas en mesure de les résoudre.

10

Vous pouvez alerter votre réponse avant de l'assigner html()

OU

Vous pouvez utiliser la propriété innerHTML au lieu html() de jquery (si elle est même)

Et vous pouvez vérifier this lien

+3

+1 pour le lien. travaillé dans mon cas pour problème avec IE8 (le problème est devenu un mauvais balisage!). il dit: _In IE il s'avère que l'attribut jQuery .html() ne remplacera pas le contenu du premier élément apparié à moins que le nouveau HTML soit valide_ – javigzz

0

Juste un instinct, mais êtes-vous sûr que vous entrez dans le bloc d'if du tout? Je demande simplement avoir trébuché dans le vrai vs « vrai » deux ou trois fois moi-même ...

Essayez:

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

peut-être pas tout, mais au moins vous permettrait d'éliminer la possibilité que vous auriez Il vous suffit de ne jamais exécuter la ligne de code que vous avez sélectionnée.

8

Il semble qu'IE8 ait des problèmes pour insérer de longues chaînes de texte avec html() de jQuery, rendant le contenu de la division complètement vide. Juste essayé avec une très longue chaîne et un contenant juste 'blah', et cela fait toute la différence.

Donc, si vous attendez de très gros mandrins de texte (comme 2k + caractères), optez pour le innerHTML natif. N'a pas fait d'autres recherches, donc je ne sais pas quelle est la longueur maximale d'une chaîne à passer par html() dans IE8.

+2

Ceci est bang on, exactement exact. Bug bizarre. –

+0

Cela m'a sauvé la vie, merci !! – user2968356

0

avoir répondu à ce problème sur link vous avez juste besoin de changer votre code pour être comme ça

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

Je sais qu'il est peu d'une réponse tardive; mais vous pouvez aussi le réparer avec un bloc try/catch. Parfois, vous pourriez ne pas avoir tout le contrôle sur le contenu. De cette façon, vous gardez le code original pour les nouveaux navigateurs, tandis que la capture exécute innerHTML pour IE8.

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

Espérons que cela aide quelqu'un!

Questions connexes