尝试读取tpl文件(Smarty模板)中的XML文件,如下所示:
<script>
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "http://localhost:8080/testXML.xml", false);
xmlhttp.send();
//xmlDoc = xmlhttp.responseText;
xmlDoc = (new DOMParser()).parseFromString(xmlhttp.responseXML, "text/xml");
alert(xmlDoc);
document.write("<table border='1'>");
//var x = new object();
var x = xmlDoc.getElementsByTagName("Name");
alert(x);
//alert(x.length);
for (i = 0; i < x.length; i++)
{
document.write("<tr><td>");
document.write(x[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue);
alert(x[i].getElementsByTagName("Name")[0].nodeValue);
document.write("</td><td>");
document.write(x[i].getElementsByTagName("Location")[0].childNodes[0].nodeValue);
document.write("</td></tr>");
}
document.write("</table>");
</script>
alert(x.length)总是返回0.这看起来像是我从网上找到并组装的非常标准的代码。
答案 0 :(得分:3)
首先,我确认xmlhttp.responseXML
实际上包含数据。监视您的网络面板(如果您使用的是浏览器)以获取服务器响应。
其次,如果您的xmlhttp.responseXML
是null
但xmlhttp.responseText
不是,则表明XML文档存在问题 - 通常是格式错误的标记/架构,或者是白色的 - 空间。根据您发布的内容,我没有看到任何问题(并DOMParser()
理解XML就好了。)
最后,不需要使用DOMParser()
,因为xmlhttp.responseXML
是一个XML文档(假设它在加载后已正确解析)。
[编辑]
另请注意,如果页面未从localhost:8080
加载,则由于AJAX中固有的跨域限制,您可能无法获取任何数据。
答案 1 :(得分:3)
如果正确设置了响应内容类型标头,则无需解析responseXML
它本身就是一个实际的XML Document对象。
查看此fiddle
var xmlDoc = xmlhttp.responseXML;
var x = xmlDoc.getElementsByTagName("Name");
alert(x.length);