Javascript AJax,如何从XML文件中的节点获取值

Javascript AJax,如何从XML文件中的节点获取值,javascript,ajax,xml,Javascript,Ajax,Xml,当有人询问某个特定的名称时,我希望从XML中获取统计信息,但我的javascript无法按我的要求工作。>br> 以下是我的XML: <player> <forward><name>Joe</name><stats>45</stats></forward> <forward><name>Jack</name><stats>42</stats><

当有人询问某个特定的名称时,我希望从XML中获取统计信息,但我的javascript无法按我的要求工作。>br>

以下是我的XML:

<player> 
<forward><name>Joe</name><stats>45</stats></forward> 
<forward><name>Jack</name><stats>42</stats></forward> 
<forward><name>Peter</name><stats>34</stats></forward> 
<forward><name>Steve</name><stats>21</stats></forward>
<goalie><name>Pat</name><stats>2.34</stats></goalie>
</player> 

工作45
杰克42
彼得34
史蒂文21
第2.34段
以下是我的HTML(ajax):


函数LoadDoc(vValue){
xmlhttp=新的XMLHttpRequest();
open(“GET”,“player.xml”,true);
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4){
应答(xmlhttp.responseXML,vValue);
}
}
xmlhttp.send(空);
}
函数应答(文档,参数值){
var计数=doc.getElementsByTagName(“转发”);
对于(var i=0;i
第一个警报很好,找到了4个元素
第二个警报对我有效。
第三个警报工作,给我45个(数字)的第一个前锋的统计数据

但奇怪的是,警报只启动一次。。。我没有4次警报,为什么它在环路内不转4次? 知道怎么了吗?

或者更好的解决方案来查找统计信息?

查看控制台中的任何错误消息。乍一看,行
警报(stats[i].firstChild.nodeValue)引用了一个未声明的变量
stats
,因此如果执行该行,脚本应该抛出一个ReferenceError并终止,这将导致警报只触发一次。

感谢Dagg Nabbit,我终于找到了它。对于前面发现的错误,我假设vname[I]不存在,因此我将“I”替换为“0”,因此它现在是vname[0]。当然,我正在查找名为“name”的第一个元素,而不是第二个元素。我将vstats[I]替换为vstat[0],它工作得非常好。

您好,对不起,我在stats中出错了,是vstats。但即使我纠正了这一点。我不能通过这个循环。循环执行一次,在1次循环后关闭。是的,在第一次循环后,它说:TypeError:vname[i]未定义Hanks Dagg Nabbit,最后我找到了它。有了这个错误,我假设vname[I]不存在,所以我将“I”替换为“0”,所以它现在是vname[0]。当然,我正在查找名为“name”的第一个元素,而不是第二个。很好,很高兴您找到了它:)
<html>
<head>
<script language="JavaScript">

function LoadDoc(vValue) {
 xmlhttp = new XMLHttpRequest();
 xmlhttp.open("GET", "player.xml",true);
 xmlhttp.onreadystatechange=function() {
 if (xmlhttp.readyState==4) {
  Answer(xmlhttp.responseXML, vValue);
  }
 }
 xmlhttp.send(null);
}

function Answer(doc, ParamValue) {

var counts=doc.getElementsByTagName("forward");
 for(var i=0;i < counts.length; i++){ 
  alert(counts.length)
  var vname = counts[i].getElementsByTagName('name');
  alert(vname[i].firstChild.nodeValue)
  var vstats = counts[i].getElementsByTagName('stats');
  alert(vstats[i].firstChild.nodeValue);
  if (vname[i].firstChild.nodeValue == ParamValue)
  {
        alert(stats[i].firstChild.nodeValue);
  }
 }

}
</script>
</head> 
<body> 
<form> 
<input type="field" id="champ" /> 
<input type="button"        

onclick="javascript:LoadDoc(document.getElementById('champ').value);" /> 
</form> 
</body> 
</html>