当有人要求提供特定名称时,我希望从我的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次?
什么是错的任何想法?
或者找到统计数据的更好解决方案?
答案 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],它完美无缺。