2010-09-27 2 views
2

Javascript являетсяConfused о 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(); 
} 

Отклик (видел поджигатель) является

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

Я ожидаю, что напечатать что-то вроде "[0], 1" (т.е. список с одним элементом и длиной списка), но вместо этого он печатает «[object NodeList] 0», поэтому он вообще не видит никаких элементов «CALL». Что случилось? Благодарю.

ответ

2

х представляет собой XML-NodeList

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

Обновление

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

возвращение ChildNodes поля 3 элемента две пустые текстовые узлы (до и после <ID>2</ID>)

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

отпечатков

'' 
'0' 
'' 
+0

К сожалению, это все еще не работает. При этом он ничего не печатает, поэтому, по-видимому, элемент (0) по какой-то причине не прошел. Как я могу сказать? Спасибо хоть :) – Dijkstra

2

Ваша переменная «x» будет NodeList, а не строкой. Вам нужно будет выяснить, что это за строка «txt», итерации по вашим <call> элементам или тому подобное; это зависит от того, что вы хотите видеть.

Кроме того, когда вы оставляете var во всех своих объявлениях переменных, где-то крошечный котенок получает шип в своей лапе.

+0

Спасибо за вашу помощь, я буду придерживаться var :) – Dijkstra