Javascript AJax,如何从XML文件中的节点获取值
当有人询问某个特定的名称时,我希望从XML中获取统计信息,但我的javascript无法按我的要求工作。>br> 以下是我的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><
<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>