2010-09-27 5 views
2

Le javascript estConfus au sujet de AJAX XMLHttpRequest

function loadXMLDoc() 
{ 
    xmlhttp=new XMLHttpRequest(); 
    xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
     x=xmlhttp.responseXML.documentElement.getElementsByTagName("CALL"); 
     txt=x + x.length; 
     document.getElementById("myDiv").innerHTML=txt; 
    } 
    } 
xmlhttp.open("GET","ajax/calls.xml",true) 
xmlhttp.send(); 
} 

La réponse (vu par Firebug) est

<?xml version="1.0" encoding="ISO-8859-1"?> 
<CALL> 
    <ID>0</ID> 
</CALL> 

Je pense à imprimer quelque chose comme "[0], 1" (à savoir une liste avec un élément, et la longueur de la liste), mais à la place il imprime "[object NodeList] 0", donc il ne voit aucun élément "CALL". Qu'est-ce qui ne va pas? Merci.

Répondre

2

x est un xml NodeList

var txt = x.item(0).nodeValue + ', ' + x.item(0).childNodes.length; 

Update

var call = xmlhttp.responseXML.documentElement; 
var ids = call.getElementsByTagName('ID'); 
var txt = call.nodeName + ', ' + call.nodeValue + ', ' + ids.length; 

childNodes de retour sur le terrain 3 éléments deux noeuds de texte vides (avant et après <ID>2</ID>)

var children = call.childNodes; 
for (i=0; i<children.length; ++i) { 
    println("'" + children.item(i).textContent + "'"); 
} 

impressions

'' 
'0' 
'' 
+0

Malheureusement, cela ne fonctionne toujours pas. Avec cela, il n'imprime rien, donc probablement le point (0) a échoué pour une raison quelconque. Comment puis-je le dire? Merci quand même :) – Dijkstra

2

Votre variable "x" sera une NodeList, pas une chaîne. Vous allez devoir déterminer ce que cette chaîne "txt" devrait être en itérant sur vos éléments <call>, ou peu importe; Cela dépend de ce que vous voulez voir.

Aussi, lorsque vous laissez var dans toutes vos déclarations de variables comme ça, quelque part un minuscule chaton reçoit une épine dans sa patte.

+0

Merci pour votre aide, je vais coller un var dans :) – Dijkstra

Questions connexes