1

我正在使用 XMLHttpRequest 从具有 XML 内容的 JSP 获取 responseXML。但无法从 responseXML 对象获取节点值。即使根节点也显示为空。

我正在使用 IE8。下面是我正在使用的代码。

function function2(){
var xhr=new XMLHttpRequest();

xhr.onreadystatechange=function(){
    if(xhr.readyState==4){
        if(xhr.status==200){
        var xhrResponse=xhr.responseXML;    
            alert(xhr.responseText);
            alert(xhrResponse==null);
            alert(xhr.getAllResponseHeaders());
            var theRoot = xhrResponse.documentElement;
            alert(theRoot);
            alert(theRoot.getElementsByTagName("Name")[0].childNodes[0].nodeValue);

            alert(xhrResponse.getElementsByTagName("Name").length);     
        }
    }
}

xhr.open("GET", "jspXML.jsp" ,true);
xhr.setRequestHeader("Content-Type", "text/xml");   
xhr.send();
}   

服务器端脚本:

<%@ page contentType="text/xml" %>
<?xml version="1.0" encoding="UTF-8"?>
<%response.setContentType("text/xml"); %>
<College>
<Student>
    <Name>A</Name>
    <Age>10</Age>
</Student>
<Student>
    <Name>B</Name>
    <Age>20</Age>
</Student>
<Student>
    <Name>C</Name>
    <Age>30</Age>
</Student>
</College>

从警报消息中,发现 responseXML 不为空,它是一个 {object]。但根元素(使用 documentElement)为空。

但 responseText 显示正确。

1.这种行为是否依赖于浏览器?

2.当我用谷歌搜索这个问题时,许多解决方案都建议将请求头设置为“text/xml”。据我了解,responseXML 是使用响应头检索的。所以,我真的需要设置请求头还是设置响应标头是正确的方法吗?

谁能告诉我是否遗漏了什么?谢谢。

4

1 回答 1

1

如果您查看 javascript 控制台或调试器,问题是 xml 文档无效。XML 声明必须是文档中的第一个内容,但您的文档以@page指令和 xml 声明之间的换行形式的空格开头。解决方案非常简单:

<%@ page contentType="text/xml" %><?xml version="1.0" encoding="UTF-8"?>
<College>
<Student>
    <Name>A</Name>
    <Age>10</Age>
</Student>
<Student>
    <Name>B</Name>
    <Age>20</Age>
</Student>
<Student>
    <Name>C</Name>
    <Age>30</Age>
</Student>
</College>

现在指令和声明之间没有换行符。另请注意,设置内容类型的脚本不是必需的 - 该@page指令已经为您设置了它。

于 2013-10-14T15:18:28.043 回答