XMLHttpRequest.responseXML 空
XMLHttpRequest.responseText 很好的获取服务端返回的XML数据
很多资料都说设置 response.setContentType("text/xml");
我都设置了,可是
XMLHttpRequest.responseXML还是为空,不知道如何解决
Action代码:
public ActionForward responseAjaxRequest(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
{
response.setContentType("text/xml;charset=gb2312");
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("<?xml version='1.0' encoding='gb2312'?>");
stringBuffer.append("\n");
stringBuffer.append("<books>");
stringBuffer.append("\n");
stringBuffer.append("<book>Struts开发基础</book>");
stringBuffer.append("\n");
stringBuffer.append("<book>Hibernate开发基础</book>");
stringBuffer.append("\n");
stringBuffer.append("<book>Spring开发基础</book>");
stringBuffer.append("\n");
stringBuffer.append("</books>");
String xmlFile = stringBuffer.toString();
PrintWriter printWriter = response.getWriter();
printWriter.write(xmlFile);
printWriter.flush();
printWriter.close();
return null;
}
14 个解决方案
#1
先简单点测试啊
printWriter.write("<ok>ok</ok>");试试能否返回,再判断是否是编码问题
printWriter.write("<ok>ok</ok>");试试能否返回,再判断是否是编码问题
#2
测试过了,不是编码问题,即
如果我不设置 response.setContentType("text/xml;charset=gb2312");
XML文档中存在中文时
responseText中会出现乱码
responseXML还是为空
设置 response.setContentType("text/xml;charset=gb2312");
responseText中打印出来的XML正常
responseXML还是为空
如果我不设置 response.setContentType("text/xml;charset=gb2312");
XML文档中存在中文时
responseText中会出现乱码
responseXML还是为空
设置 response.setContentType("text/xml;charset=gb2312");
responseText中打印出来的XML正常
responseXML还是为空
#3
也觉得是编码问题 你jsp的编码是怎么样的?
#4
var xmlContent = getXmlHttpRequestObject();
alert(xmlContent);
不知道这么写可以不
alert(xmlContent);
不知道这么写可以不
#5
这么写
var searchReq = getXmlHttpRequestObject();
searchReq.open("GET", url, true);(这个url你是的.do)
searchReq.onreadystatechange = handleSearchSuggest;
searchReq.send(null);
然后你在handleSearchSuggest这个方法里去得到返回值。searchReq.responseText可以返回一个文本
var searchReq = getXmlHttpRequestObject();
searchReq.open("GET", url, true);(这个url你是的.do)
searchReq.onreadystatechange = handleSearchSuggest;
searchReq.send(null);
然后你在handleSearchSuggest这个方法里去得到返回值。searchReq.responseText可以返回一个文本
#6
stringBuffer.append("<?xml version='1.0' encoding='gb2312'?>");
很可能是这里有错误,encoding='gb2312'你设成utf-8的试试看。
#7
你在ie里测试的还是其他浏览器?
你确认输出的都是上面的xml部分,而没有其他如:<html>标签等?
你确认输出的都是上面的xml部分,而没有其他如:<html>标签等?
#8
你返回的xml没有什么问题···那就是你页面调用ajax的问题了~参考下面的例子改改看
var req;
function Change_Select() {
var url = "";
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (req) {
req.open("GET", url, true);
req.onreadystatechange = callback;
req.send(null);
}
}
function callback() {
if (req.readyState == 4) {
if (req.status == 200) {
parseMessage();
} else {
alert("Not able to retrieve description" + req.statusText);
}
}
}
function parseMessage() {
var xmlDoc = req.responseXML;
}
#9
ajax返回的编码应该是UTF-8
response.setContentType("text/xml;utf-8");
response.setHeader("Cache-Control ", "no-cache");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
response.setContentType("text/xml;utf-8");
response.setHeader("Cache-Control ", "no-cache");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
#10
都测试过了,真的不行呢,不知道什么原因!
把代码贴出来:
HTML部分:
然后,IE7.0显示 object does't support this property or method
把代码贴出来:
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("<?xml version='1.0' encoding='UTF-8'?>");
stringBuffer.append("root");
stringBuffer.append("<book>Java开发基础</book>");
stringBuffer.append("<book>Java开发基础</book>");
stringBuffer.append("<book>Java开发基础</book>");
stringBuffer.append("/root");
String xmlFile = stringBuffer.toString();
response.setHeader("Cache-Control ", "no-cache");
response.setContentType("text/xml;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter printWriter = response.getWriter();
printWriter.write(xmlFile);
printWriter.flush();
printWriter.close();
return null;
HTML部分:
if (xmlHttp == null)
{
// 创建 xmlHttp 对象
createXMLHttpRequest();
}
// 通过timestamp="+new Date().getTime();使得每次发送的URL不同,强制浏览器刷新
var url = "site.ajax.linkage.do?method=responseCompRequest×tamp=" + new Date().getTime();
xmlHttp.open("post", url, true);
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
xmlHttp.onreadystatechange = function(){deptListCallback(compID);};
xmlHttp.send(null);
function deptListCallback(id)
{
if (xmlHttp.readyState == 4)
{
if(xmlHttp.status == 200)
{
processServerResponseForDeptMessage();
}
}
}
function processServerResponseForDeptMessage()
{
var xmlRead = xmlHttp.responseXML();
alert("xmlRead" + xmlRead);
}
然后,IE7.0显示 object does't support this property or method
#11
但是,这段代码:
function processServerResponseForDeptMessage()
{
var xmlRead = xmlHttp.responseXML();
alert("xmlRead" + xmlRead);
}
换为
var xmlRead = xmlHttp.responseText;
alert("xmlRead" + xmlRead);
的时候,上面 stringBuffer的内容就打印出来.
function processServerResponseForDeptMessage()
{
var xmlRead = xmlHttp.responseXML();
alert("xmlRead" + xmlRead);
}
换为
var xmlRead = xmlHttp.responseText;
alert("xmlRead" + xmlRead);
的时候,上面 stringBuffer的内容就打印出来.
#12
呵呵,不好意思,上面
var xmlRead = xmlHttp.responseXML();
弄错了,多了后面的括号,
然后就是把括号去掉后,xmlRead 打印出来为空
改为 var xmlRead = xmlHttp.responseText;
xmlRead 打印出上面 stringBuffer的内容.
var xmlRead = xmlHttp.responseXML();
弄错了,多了后面的括号,
然后就是把括号去掉后,xmlRead 打印出来为空
改为 var xmlRead = xmlHttp.responseText;
xmlRead 打印出上面 stringBuffer的内容.
#13
问题解决了吗?? 同样情况,急~~
#14
我也遇到过同样的问题,可以得到responseText,而responseXML为空。看到了8楼的回答,大受启发,检查了调用ajax的语句,发现了一句
if (ajaxReq.overrideMimeType) {
ajaxReq.overrideMimeType('text/xml');
}
于是注释掉,再运行,就OK了!
谢谢8楼的意见,也希望对大家都有用啦
#1
先简单点测试啊
printWriter.write("<ok>ok</ok>");试试能否返回,再判断是否是编码问题
printWriter.write("<ok>ok</ok>");试试能否返回,再判断是否是编码问题
#2
测试过了,不是编码问题,即
如果我不设置 response.setContentType("text/xml;charset=gb2312");
XML文档中存在中文时
responseText中会出现乱码
responseXML还是为空
设置 response.setContentType("text/xml;charset=gb2312");
responseText中打印出来的XML正常
responseXML还是为空
如果我不设置 response.setContentType("text/xml;charset=gb2312");
XML文档中存在中文时
responseText中会出现乱码
responseXML还是为空
设置 response.setContentType("text/xml;charset=gb2312");
responseText中打印出来的XML正常
responseXML还是为空
#3
也觉得是编码问题 你jsp的编码是怎么样的?
#4
var xmlContent = getXmlHttpRequestObject();
alert(xmlContent);
不知道这么写可以不
alert(xmlContent);
不知道这么写可以不
#5
这么写
var searchReq = getXmlHttpRequestObject();
searchReq.open("GET", url, true);(这个url你是的.do)
searchReq.onreadystatechange = handleSearchSuggest;
searchReq.send(null);
然后你在handleSearchSuggest这个方法里去得到返回值。searchReq.responseText可以返回一个文本
var searchReq = getXmlHttpRequestObject();
searchReq.open("GET", url, true);(这个url你是的.do)
searchReq.onreadystatechange = handleSearchSuggest;
searchReq.send(null);
然后你在handleSearchSuggest这个方法里去得到返回值。searchReq.responseText可以返回一个文本
#6
stringBuffer.append("<?xml version='1.0' encoding='gb2312'?>");
很可能是这里有错误,encoding='gb2312'你设成utf-8的试试看。
#7
你在ie里测试的还是其他浏览器?
你确认输出的都是上面的xml部分,而没有其他如:<html>标签等?
你确认输出的都是上面的xml部分,而没有其他如:<html>标签等?
#8
你返回的xml没有什么问题···那就是你页面调用ajax的问题了~参考下面的例子改改看
var req;
function Change_Select() {
var url = "";
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (req) {
req.open("GET", url, true);
req.onreadystatechange = callback;
req.send(null);
}
}
function callback() {
if (req.readyState == 4) {
if (req.status == 200) {
parseMessage();
} else {
alert("Not able to retrieve description" + req.statusText);
}
}
}
function parseMessage() {
var xmlDoc = req.responseXML;
}
#9
ajax返回的编码应该是UTF-8
response.setContentType("text/xml;utf-8");
response.setHeader("Cache-Control ", "no-cache");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
response.setContentType("text/xml;utf-8");
response.setHeader("Cache-Control ", "no-cache");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
#10
都测试过了,真的不行呢,不知道什么原因!
把代码贴出来:
HTML部分:
然后,IE7.0显示 object does't support this property or method
把代码贴出来:
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("<?xml version='1.0' encoding='UTF-8'?>");
stringBuffer.append("root");
stringBuffer.append("<book>Java开发基础</book>");
stringBuffer.append("<book>Java开发基础</book>");
stringBuffer.append("<book>Java开发基础</book>");
stringBuffer.append("/root");
String xmlFile = stringBuffer.toString();
response.setHeader("Cache-Control ", "no-cache");
response.setContentType("text/xml;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter printWriter = response.getWriter();
printWriter.write(xmlFile);
printWriter.flush();
printWriter.close();
return null;
HTML部分:
if (xmlHttp == null)
{
// 创建 xmlHttp 对象
createXMLHttpRequest();
}
// 通过timestamp="+new Date().getTime();使得每次发送的URL不同,强制浏览器刷新
var url = "site.ajax.linkage.do?method=responseCompRequest×tamp=" + new Date().getTime();
xmlHttp.open("post", url, true);
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
xmlHttp.onreadystatechange = function(){deptListCallback(compID);};
xmlHttp.send(null);
function deptListCallback(id)
{
if (xmlHttp.readyState == 4)
{
if(xmlHttp.status == 200)
{
processServerResponseForDeptMessage();
}
}
}
function processServerResponseForDeptMessage()
{
var xmlRead = xmlHttp.responseXML();
alert("xmlRead" + xmlRead);
}
然后,IE7.0显示 object does't support this property or method
#11
但是,这段代码:
function processServerResponseForDeptMessage()
{
var xmlRead = xmlHttp.responseXML();
alert("xmlRead" + xmlRead);
}
换为
var xmlRead = xmlHttp.responseText;
alert("xmlRead" + xmlRead);
的时候,上面 stringBuffer的内容就打印出来.
function processServerResponseForDeptMessage()
{
var xmlRead = xmlHttp.responseXML();
alert("xmlRead" + xmlRead);
}
换为
var xmlRead = xmlHttp.responseText;
alert("xmlRead" + xmlRead);
的时候,上面 stringBuffer的内容就打印出来.
#12
呵呵,不好意思,上面
var xmlRead = xmlHttp.responseXML();
弄错了,多了后面的括号,
然后就是把括号去掉后,xmlRead 打印出来为空
改为 var xmlRead = xmlHttp.responseText;
xmlRead 打印出上面 stringBuffer的内容.
var xmlRead = xmlHttp.responseXML();
弄错了,多了后面的括号,
然后就是把括号去掉后,xmlRead 打印出来为空
改为 var xmlRead = xmlHttp.responseText;
xmlRead 打印出上面 stringBuffer的内容.
#13
问题解决了吗?? 同样情况,急~~
#14
我也遇到过同样的问题,可以得到responseText,而responseXML为空。看到了8楼的回答,大受启发,检查了调用ajax的语句,发现了一句
if (ajaxReq.overrideMimeType) {
ajaxReq.overrideMimeType('text/xml');
}
于是注释掉,再运行,就OK了!
谢谢8楼的意见,也希望对大家都有用啦