2010-09-27 83 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