2009-04-29 3 views
0

Salutations. Voici un objet XML retourné par mon serveur dans l'objet responseXML:Puis-je ajouter un objet Ajax requestXML à mon arborescence en une seule fois?

<tableRoot> 
    <table> 
     <caption>howdy!</caption> 
     <tr> 
     <td>hello</td> 
     <td>world</td> 
     </tr> 
     <tr> 
     <td>another</td> 
     <td>line</td> 
     </tr> 
    </table> 

Maintenant, j'attach ce fragment à mon arbre du document comme ceci:.

getElementById ('de entryPoint') appendChild (responseXML.firstChild.firstChild);

Mais au lieu d'être rendu comme une table, je reçois le texte suivant texte:

Howdy! helloworldanotherline

Le même résultat se produit de remplacer firstChild.firstChild par firstChild. Il semble que je reçois juste les nodeValues, et toutes les balises sont effacées ?! Est-ce que je comprends mal ce que l'objet responseXML est censé représenter? Cela fonctionne, BTW, si je supprime les balises 'root', et définissez innerHTML à responseText.
Quelqu'un peut-il m'éclairer sur la bonne façon d'utiliser responseXML?

Répondre

0

Vous pouvez créer un élément à la position que vous souhaitez insérer et que faire

element.innerHTML = request.responseText

+0

Merci, et j'ai cette approche pour travailler. Mais je pense qu'il y aurait des avantages à utiliser appendChild. Pour une chose, je pourrais ensuite utiliser replaceChild pour échanger du contenu. Et avec innerHTML je ne peux pas facilement faire une boucle dans l'arborescence en supprimant les références de rappel ou en modifiant les attributs. En tout cas, je ne comprends tout simplement pas l'objet responseXML. Il ne semble pas agir de la même manière que les objets que je construis à partir de zéro en utilisant appendChild. Soit je pense à tort, soit j'ai une erreur d'implémentation. En ce moment, je ne sais pas ce que c'est! –

+0

Je ne comprends pas vraiment. Après avoir fait innerHTML tout est converti en nœuds DOM sur lesquels vous pouvez faire tout ce dont vous avez besoin. Rien de magique à ce sujet. –

+0

Ok, merci. J'étais évidemment confus. Donc, innerHTML attache ma table à l'arbre, alors que l'utilisation des méthodes DOM pour attacher le fichier responseXML ne sert à rien. Un peu surprenant. –

4

Vous obtenez le texte au lieu d'une table, parce que vous utilisez DOM pur pour les manipulations et votre réponse XML n'a pas les déclarations d'espaces de noms. Ainsi, lors de l'ajout d'un navigateur d'éléments XML, vous ne savez pas si votre balise "table" provient de HTML, XUL, SVG ou autre.

1) Ajouter un espace de nom:

<table xmlns="http://www.w3.org/1999/xhtml"> 

2) Au lieu d'insérer directement un XML reffered DOM Element, vous devez d'abord importer ce nœud dans votre HTML DOM document:

var element = document.importNode(responseXML.firstChild.firstChild, true); 
document.getElementById('entryPoint').appendChild(element); 

Hope this aide!

+0

Oh, comment je souhaite que vous aviez inclus des détails sur IE9 ici. – Aeyoun

Questions connexes