我今天遇到了一个问题,在用post发送一个请求到服务器,然后,返回来了XML的串数据,我想通过response.responseXML来取得XML的Document对象,来实现用Javascript对XML文档的解析,但是,我就只能用response.responseText取得文本数据,通过response.responseXML取得的对象为null.结果一直也没有搞明白。
javascript的代码如下(用的prototype1.6.js):
function findpoi(){
//alert("find ");
var pname=$F('pnid');
alert(pname);
var url="poiSearch.do";
var opt = {
method:'post',
//contentType:'application/xml',
//requestHeaders:'text/xml',
onComplete:function(transport){
alert(transport.status);
document.title="ok";
if(200==transport.status){
//document.title="ok";
var cntTxt=transport.responseText;
alert(cntTxt);
var dobj = transport.responseXML;
alert("xml is : "+dobj);
(此处总是取得的是null对象)
//var pl = cntTxt.getElementByName("poi");
//alert(pl);
var ajObj = Ajax.getTransport();
alert(ajObj);
}
},
postBody:"?city=beijing&keyword=kfc"
};
var ajax=new Ajax.Request(url,opt);
}
我的struts action的代码如下:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm poiForm = (DynaActionForm) form;
String city = (String) poiForm.get("city");
String keyword = (String) poiForm.get("keyword");
Search bs = new Search();
bs.baseSearch(city + "/" + keyword);
PoiDAO poidao = new PoiDAO();
int count = 10;
int page = 1;
ArrayList arry = poidao.by_key_search("北京", "长安商场", count,
page);
System.out.println(arry.size());
Document doc= DocumentFactory.getInstance().createDocument();
doc.setXMLEncoding("UTF-8");
Element root = doc.addElement("pois");
root.addElement("poi")
.addAttribute("pid", "1155")
.addAttribute("longitude", "116.5864")
.addAttribute("latitude", "39.8195");
ListIterator iter = arry.listIterator();
while(iter.hasNext()){
Poi p = (Poi)iter.next();
//float lon = p.getLatitude();
int id=p.getPoi_id();
double lon=p.getLongitude();
double lat = p.getLatitude();
System.out.println("id is : "+id);
System.out.println("lon : " + lon);
Element poi=root.addElement("poi")
.addAttribute("pid", String.valueOf(p.getPoi_id()))
.addAttribute("longitude", String.valueOf(lon))
.addAttribute("latitude", String.valueOf(lat));
}
try {
PrintWriter w = response.getWriter();
XMLWriter writer = new XMLWriter(w);
writer.write(doc);
writer.close();
w.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
下午的时候,总是在试图通过设置contentType来实现,结果是失败了。回来的路上,我就一直在想,能取到XML的串,不能取到XML的对象。那么也就是说,返回的数据是串,也就是文本类型。突然,我的脑海里闪现了一个问题,是不是返回的contentType没有设置成xml.
所以,我就在action里面,添加了
response.setContentType("text/xml");
重新测试,果然成功。
response.responseXML取到了对象。
问题就这样得到了解决。
问题总结:
如果想要通过AJAX的response.responseXML取得XML Document对象,那么就要在服务器的相应的时候设置ContextType为text/xml,否则的话,就只能去得到xml的文本串,不能得到DOM对象。
|----------------------------------------------------------------------------------------|
版权声明 版权所有 @zhyiwww
引用请注明来源 http://www.blogjava.net/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2008-05-21 21:11
zhyiwww 阅读(2508)
评论(3) 编辑 收藏 所属分类:
j2ee