2012-06-12 1 views
0

J'ai le problème suivant avec l'analyse XML pour laquelle mon script fonctionne dans IE mais pas dans Firefox/Chrome (ce qui est bizarre). Bien sûr, c'est quelque chose de vraiment stupide, mais toute aide est appréciée.JavaScript XML fonctionne dans IE mais pas dans Firefox/Chrome

La fonction JavaScript suivante:

this.displayData = function(xml) 
{ 
    var table = document.createElement("table"); // table for results 
    table.border=0; 
    table.width="100%"; 
    table.classname="requestList"; 

    var container = document.getElementById('mainright'); 

    if (container.hasChildNodes()) 
    { 
     while(container.childNodes.length >= 1) 
      container.removeChild(container.firstChild); 
    } 

    container.appendChild(table); 

    var entities = xml.getElementsByTagName("entity"); 

    for (var i=0; i<entities.length; ++i) 
    { 
     var entity = entities[i]; 
     var row = table.insertRow(table.getElementsByTagName("tr").length); 
     var fields = entity.getElementsByTagName("field"); 

     for (var z=0; z<fields.length; ++z) 
     { 
      var cell = row.insertCell(z); 
      cell.innerHTML = "("+fields[z].childNodes[0].nodeValue+")"; 
     } 
    } 
} 

est appelé comme un rappel XMLHTTP et le XML semble valide. Exemple de la sortie XML:

<data-list> 
<entity entity=""> 
<field field="requestid"> 
<![CDATA[ 1 ]]> 
</field> 
<field field="customer"> 
<![CDATA[ 1 ]]> 
</field> 
<field field="assignteam"> 
<![CDATA[ 0 ]]> 
</field> 
<field field="assignuser"> 
<![CDATA[ admin ]]> 
</field> 
<field field="class"> 
<![CDATA[ 1 ]]> 
</field> 
<field field="openeddt"> 
<![CDATA[ 2012-06-11 19:39:26 ]]> 
</field> 
<field field="status"> 
<![CDATA[ 1 ]]> 
</field> 
</entity> 
<entity entity=""> 
<field field="requestid"> 
<![CDATA[ 2 ]]> 
</field> 
<field field="customer"> 
<![CDATA[ 1 ]]> 
</field> 
<field field="assignteam"> 
<![CDATA[ 0 ]]> 
</field> 
<field field="assignuser"> 
<![CDATA[ admin ]]> 
</field> 
<field field="class"> 
<![CDATA[ 1 ]]> 
</field> 
<field field="openeddt"> 
<![CDATA[ 2012-06-11 19:40:02 ]]> 
</field> 
<field field="status"> 
<![CDATA[ 1 ]]> 
</field> 
</entity> 
</data-list> 

Dans IE quand je fais la demande, il affiche les données dans une table nouvellement créée, une ligne par entité et une colonne par champ. Cependant, dans Firefox et Chrome, la requête est appelée fine et ne génère aucune erreur, mais les chaînes vides sont renvoyées sous la forme de valeurs de nœud, par ex. tout ce que je reçois est() dans chacune des (bonnes) lignes et colonnes. Je suis sûr que je suis juste vraiment stupide. Toute aide très appréciée.

Cheers,

Dave.

** RÉPONSE J'espère mais je ne répondre à ma question PROPRE POUR 7 heures **

droit si une minute après avoir demandé il me semble avoir trébuché sur la réponse ...

textContent

Cela semble être l'attribut utilisé dans Firefox et Chrome pour les données textuelles (je suppose que c'était inclus dans les balises CDATA). Cependant, changer le code en champs [z] .textContent puis rompt IE.

Je l'ai fait ce qui suit:

var data = (fields[z].textContent == undefined) ? fields[z].firstChild.nodeValue : fields[z].textContent; 
cell.innerHTML = data; 

qui semble bien fonctionner dans les deux.

Mais j'accueillerais toutes les solutions "appropriées".

Cheers,

Dave.

+0

P.S. J'obtiens la même réponse avec les champs [z] .firstChild.nodeValue et aussi avec les entités [i] .childNodes [z] ... – Dave

Répondre

0

Cela s'est avéré être un problème d'en-tête - stupidement je ne mettais pas l'en-tête de sortie dans la génération XML à text/xml. Bien que IE ne se souciait pas de FF et Chrome a fait.

La définition de l'en-tête Content-type dans PHP l'a résolu.

Questions connexes