NodeList长度始终为0

时间:2014-01-23 05:44:53

标签: javascript xml

尝试读取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.这看起来像是我从网上找到并组装的非常标准的代码。

2 个答案:

答案 0 :(得分:3)

首先,我确认xmlhttp.responseXML实际上包含数据。监视您的网络面板(如果您使用的是浏览器)以获取服务器响应。

其次,如果您的xmlhttp.responseXMLnullxmlhttp.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);