[AJAX/DOM] bug sous IE

Résolu/Fermé
wolfy - 2 mars 2011 à 13:43
 wolfy - 2 mars 2011 à 14:31
Bonjour à tous,

je suis entrain de travaillé sur la compatibilité de mon site, sous firefox aucun problème mais sous IE ...

pour ne pas retaper tout mon code je vais expliquer vite fait:
je reçois de l'AJAX un arbre en XML, que je parse pour l'afficher dans un tableau, la où cela coince c'est que toute les balises XML ne sont pas toujours présente, je test donc si elle existe par un simple if qui test si la balise <NAMEDEVICE> existe :

if(((x[i].getElementsByTagName("NAMEDEVICE")[0]=="[object Element]") || (x[i].getElementsByTagName("NAMEDEVICE")[0]=="[object]")) && (x[i].getElementsByTagName("NAMEDEVICE")[0].childNodes[0].nodeValue.search("IP Phone")!=-1))

un peu lourd je sais ... sous firefox ca passe nikel mais sous IE il s'y arrete direct.

x = mon arbre XML
x[i] = une partie de l'arbre

si quelqu'un a une solution ou une piste a me proposer, il est le bien venu

merci a tous


4 réponses

boly38 Messages postés 267 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 29 septembre 2016 80
2 mars 2011 à 14:10
pour moi "[object Element]" et "[object]" correspondent à des résultats de conversions d'objet en chaîne de caractères... amha ce n'est pas le genre d'élément à utiliser pour tester un objet.

Un test avec uniquement l'objet devrait suffire quelque-soit le navigateur.
Tente un essai du genre :
 
if(x[i] && x[i].getElementsByTagName("NAMEDEVICE")
         && x[i].getElementsByTagName("NAMEDEVICE")[0]) {
 nameDeviceNode = x[i].getElementsByTagName("NAMEDEVICE")[0];
   if (nameDeviceNode 
 && nameDeviceNode.childNodes[0]
 && nameDeviceNode.childNodes[0].nodeValue.search("IP Phone")!=-1) {
      // @todo implémentation
   }
}
2
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
2 mars 2011 à 13:58
Bonjour,

Pour essayer de comprendre ce qui ne se passe pas correctement, je te conseille de rajouter, juste avant ton « if », ces quelques traces :

alert(x[i].getElementsByTagName("NAMEDEVICE")[0]);
alert(x[i].getElementsByTagName("NAMEDEVICE")[0].childNodes[0].nodeValue.search("IP Phone"));

Ça permettras de savoir où il ne passe pas...

Xavier
0
je l'ai deja fait mais en gros ca m affiche:

alert(x[i].getElementsByTagName("NAMEDEVICE")[0]);
=> null , [object] ou [object Element]
alert(x[i].getElementsByTagName("NAMEDEVICE")[0].childNodes[0].nodeValue);
=> si le premier est différent de null ca affiche : Cisco Ip Phone ... par contre si le premier est null la ca plante mais ca c est normal vu que ca n'existe pas
0
Grand merci, ca fonctionne nickel

je devrais parfois revoir au plus simple ...
0