XMLHttpRequest对象:can';t使用responseXML从XML检索数据
我使用XMLHttpRequest从包含XML内容的JSP获取responseXML。但无法从responseXML对象获取节点值。甚至根节点也显示为null 我正在使用IE8。 下面是我正在使用的代码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){
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请求一起发送