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

时间:2013-12-22 18:27:30

标签: javascript ajax xml

当有人要求提供特定名称时,我希望从我的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> 

这是我的HTML(ajax):

<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> 

第一个ALERT很好找到4个元素
第二个ALERT给我JOE。
第三次ALERT的工作给我45个(数量)第一个前锋的统计数据

但奇怪的是,警报只启动一次......我没有4次警报,为什么它在循环内没有转4次? 什么是错的任何想法?
或者找到统计数据的更好解决方案?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

感谢Dagg Nabbit,终于找到了它。由于之前发现的错误,我认为vname [i]不存在,所以我更换了&#34; i&#34;用&#34; 0&#34;所以它现在是vname [0]。我肯定会查找第一个名为&#34; name&#34;而不是第二个。我用vstat [0]替换vstats [i],它完美无缺。