对AJAX XMLHttpRequest感到困惑

时间:2010-09-27 17:22:57

标签: javascript xml ajax

javascript是

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();
}

响应(由firebug看到)是

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

我希望它能打印出类似“[0],1”的东西(即带有一个元素的列表,以及列表的长度),而是打印“[object NodeList] 0”,所以它不会看到任何“CALL”元素。出了什么问题?感谢。

2 个答案:

答案 0 :(得分:2)

您的“x”变量将是NodeList,而不是字符串。您将不得不通过遍历<call>元素或其他任何元素来计算出“txt”字符串应该是什么;这取决于你想看到什么。

另外,当你在所有的变量声明中留下var时,一只小猫会在它的爪子上刺出一根刺。

答案 1 :(得分:2)

x是一个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'
''