在下面的JavaScript代码中,它适用于第一个循环,但对于第二个循环,它始终显示y.length等于0并且永远不会进入循环。 y.length不为零,我的xml文件有很多东西。我试过调试,但不能再进一步了。任何帮助将不胜感激。
function myXML(myText, myTarget) {
try {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(myText);
} catch (e) {
try {
parser = new DOMParser();
xmlDoc = parser.parseFromString(myText, "text/xml");
} catch (e) {
alert(e.message);
return;
}
}
var x = xmlDoc.getElementsByTagName("myThing");
for (var i = 0; i < x.length; i++) {
if (x[i].getElementsByTagName("firstItem")[0].hasChildNodes) {
document.getElementById(target).innerHTML = document.getElementById(myTarget).innerHTML + x[i].getElementsByTagName("secondThing")[0].childNodes[0].nodeValue + " - " + x[i].getElementsByTagName("firstItem")[0].childNodes[0].nodeValue + "<br>";
var response = "";
var sid = x[i].getElementsByTagName("id")[0].childNodes[0].nodeValue;
$.ajax({
type: "GET",
url: "../sitman/requests/get_affected_nodes.cgi?sid=" + sid,
async: false,
success: function(text) {
response = text;
}
});
try {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(response);
} catch (e) {
try {
parser = new DOMParser();
xmlDoc = parser.parseFromString(response, "text/xml");
} catch (e) {
alert(e.message);
return;
}
}
var y = xmlDoc.getElementsByTagName("myThing");
for (var j = 0; j < y.length; j++) {
document.getElementById(myTarget).innerHTML = document.getElementById(myTarget).innerHTML + y[j].getElementsByTagName("myname")[0].childNodes[0].nodeValue + "<br>";
}
}
}
}
y的XML在下面。
<xml>
<entries>
<myThing>
<myName>xxx</myName>
<test1>test8</test1>
<test2>test6</test2>
</myThing>
<myThing>
<myName>xxx</myName>
<test1>test2</test1>
<test2>test3</test2>
</myThing>
</entries>
</xml>
答案 0 :(得分:1)
注意到代码中的几个问题。首先,您要访问此行中的未定义变量 target :
document.getElementById(target).innerHTML = document.getElementById(myTarget).innerHTML + x[i].getElementsByTagName("secondThing")[0].childNodes[0].nodeValue + " - " + x[i].getElementsByTagName("firstItem")[0].childNodes[0].nodeValue + "<br>";
假设目标应该是 myTarget 。
然后你用这个解析ajax响应:
try {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(response);
} catch (e) {
try {
parser = new DOMParser();
xmlDoc = parser.parseFromString(response, "text/xml");
} catch (e) {
alert(e.message);
return;
}
}
但响应已经是一个XML对象。您可以用以下内容替换整个部分:
xmlDoc = response;
最后,在y的最后一个循环中,你有这个电话:
y[j].getElementsByTagName("myname")
但是在XML中,元素的名称实际上是myName
。
我已经创建了一个测试服务器,所有这些东西都已修复,看起来对我来说没问题,所以我认为这就是你需要修复的全部内容。