Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XMLHttpRequest对象:can';t使用responseXML从XML检索数据_Xml_Jsp_Xmlhttprequest - Fatal编程技术网

XMLHttpRequest对象:can';t使用responseXML从XML检索数据

XMLHttpRequest对象:can';t使用responseXML从XML检索数据,xml,jsp,xmlhttprequest,Xml,Jsp,Xmlhttprequest,我使用XMLHttpRequest从包含XML内容的JSP获取responseXML。但无法从responseXML对象获取节点值。甚至根节点也显示为null 我正在使用IE8。 下面是我正在使用的代码 function function2(){ var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4){ if(xhr.status==200){

我使用XMLHttpRequest从包含XML内容的JSP获取responseXML。但无法从responseXML对象获取节点值。甚至根节点也显示为null

我正在使用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>

A.
10
B
20
C
30
从警报消息中,发现responseXML不是null,它是一个{object]。但根元素(使用documentElement)为null

但responseText正在正确显示

1.此行为是否依赖于浏览器

2.当我在谷歌上搜索这个问题时,很多解决方案建议将请求头设置为“text/xml”。据我所知,responseXML是使用响应头检索的。那么,我真的需要设置请求头还是设置响应头才是正确的方法


有人能告诉我是否遗漏了什么吗?谢谢。

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

<%@ 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>

A.
10
B
20
C
30

现在,指令和声明之间没有换行符。还要注意,设置内容类型的scriptlet是不必要的,
@page
指令已经为您设置了它。

如果您查看javascript控制台或调试器,问题是xml文档无效。xml声明必须是f文档中的第一件事,但您的文档以换行符形式的空格开头,在
@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>

A.
10
B
20
C
30

现在,指令和声明之间没有换行符。还要注意,设置内容类型的scriptlet是不必要的,
@page
指令已经为您设置了它。

感谢@Tap的快速响应,它成功了……而且我还注释掉了xhr.setRequestHeader(“内容类型”,“text/xml”);部分。它仍然给出了正确的结果。因此,我认为设置请求头并不是真正需要的,因为从技术上讲,我用HTTP RequestThank@Tap发送空值,用于快速响应,它起了作用……而且我还注释了xhr.setRequestHeader(“内容类型”,“文本/xml”);部分。它仍然给出了正确的结果。所以我认为设置请求头并不是真的需要,因为从技术上讲,我正在发送空值,并与HTTP请求一起发送