AJAX responseXML返回为空

SINODATA_QJF 2010-03-16 09:31:03
初学AJAX,想实现JS接收Struts1.2 Action中动态生成的XML文档,可是总为空,不知道怎么解决啊

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;
}




...全文
814 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
AABPs9AArAAA1gwAAI 2010-05-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fancy161 的回复:]

你返回的xml没有什么问题···那就是你页面调用ajax的问题了~参考下面的例子改改看
Java code
var req;
function Change_Select() {
var url = "";
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (windo……
[/Quote]

我也遇到过同样的问题,可以得到responseText,而responseXML为空。看到了8楼的回答,大受启发,检查了调用ajax的语句,发现了一句
if (ajaxReq.overrideMimeType) {
ajaxReq.overrideMimeType('text/xml');
}
于是注释掉,再运行,就OK了!
谢谢8楼的意见,也希望对大家都有用啦
liulin063326 2010-05-25
  • 打赏
  • 举报
回复
问题解决了吗?? 同样情况,急~~
SINODATA_QJF 2010-03-21
  • 打赏
  • 举报
回复
呵呵,不好意思,上面

var xmlRead = xmlHttp.responseXML();

弄错了,多了后面的括号,

然后就是把括号去掉后,xmlRead 打印出来为空
改为 var xmlRead = xmlHttp.responseText;

xmlRead 打印出上面 stringBuffer的内容.
SINODATA_QJF 2010-03-21
  • 打赏
  • 举报
回复
但是,这段代码:

function processServerResponseForDeptMessage()
{
var xmlRead = xmlHttp.responseXML();
alert("xmlRead" + xmlRead);
}



换为

var xmlRead = xmlHttp.responseText;
alert("xmlRead" + xmlRead);

的时候,上面 stringBuffer的内容就打印出来.
SINODATA_QJF 2010-03-21
  • 打赏
  • 举报
回复
都测试过了,真的不行呢,不知道什么原因!

把代码贴出来:

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
fancy161 2010-03-17
  • 打赏
  • 举报
回复
你返回的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;

}
孟子E章 2010-03-17
  • 打赏
  • 举报
回复
你在ie里测试的还是其他浏览器?
你确认输出的都是上面的xml部分,而没有其他如:<html>标签等?
hoojo 2010-03-17
  • 打赏
  • 举报
回复

stringBuffer.append("<?xml version='1.0' encoding='gb2312'?>");
很可能是这里有错误,encoding='gb2312'你设成utf-8的试试看。
J2EE_ME 2010-03-17
  • 打赏
  • 举报
回复
这么写
var searchReq = getXmlHttpRequestObject();
searchReq.open("GET", url, true);(这个url你是的.do)
searchReq.onreadystatechange = handleSearchSuggest;
searchReq.send(null);

然后你在handleSearchSuggest这个方法里去得到返回值。searchReq.responseText可以返回一个文本
J2EE_ME 2010-03-17
  • 打赏
  • 举报
回复
var xmlContent = getXmlHttpRequestObject();
alert(xmlContent);
不知道这么写可以不
kc8886 2010-03-17
  • 打赏
  • 举报
回复
也觉得是编码问题 你jsp的编码是怎么样的?
山城忙碌人 2010-03-17
  • 打赏
  • 举报
回复
ajax返回的编码应该是UTF-8
response.setContentType("text/xml;utf-8");
response.setHeader("Cache-Control ", "no-cache");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
SINODATA_QJF 2010-03-16
  • 打赏
  • 举报
回复
测试过了,不是编码问题,即

如果我不设置 response.setContentType("text/xml;charset=gb2312");
XML文档中存在中文时
responseText中会出现乱码
responseXML还是为空

设置 response.setContentType("text/xml;charset=gb2312");
responseText中打印出来的XML正常
responseXML还是为空
孟子E章 2010-03-16
  • 打赏
  • 举报
回复
先简单点测试啊
printWriter.write("<ok>ok</ok>");试试能否返回,再判断是否是编码问题

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧