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.
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