2010-09-27 77 views
2

的JavaScript是困惑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

x是一個XML節點列表

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 2010-09-28 16:41:58

2

你的「X」變量將是一個節點列表,而不是一個字符串。你將不得不通過迭代你的<call>元素或者其他什麼來計算出那個「txt」字符串應該是什麼;這取決於你想看到什麼。

此外,當您在所有喜歡你的變量聲明離開過var,某處一個小小貓獲取它的爪子的眼中釘。

+0

感謝您的幫助,我會:) – Dijkstra 2010-09-28 08:38:21