Ajax的响应信息ResponseText和ResponseXML

     用Jquery写一了一段小代码提交ajax请求道servlet,返回选定省份的所有城市,实现省市和城市的联动效果,本来觉得一段简单的小代码很容易搞定,结果一直运行不正确,用firebug调试js脚本之后,发现返回的data为document类型,而我代码中需要返回的是字符串类型。     

    在网络监控中发现返回的响应信息中response的类型为xml然后就一直报错:

 

于是查看服务器端的servlet代码发现:

为了得到从服务器端返回的字符串结果,将contentType改为text/html.

进行测试后,发现,返回的类型为responseText:

    网络监控中发现返回的是html文档:

     

     在servlet中将contentType设置为text/html,返回结果就是字符串,正确显示。我想不通为什么将contentType设置为text/xml ,返回字符串就出错,于是差了些资料,原来是XMLHttpRequest的responseText和responseXML的理解不够透彻。因此,总结出ajax的概念深入理解:

ResponseText和ResponseXML

  响应信息的内容可能有多种不同的形式,例 如XML、纯文本、(X)HTML或JavaScript对象符号(JSON)。我们可以根据所接收到的数据格式的不同,用两种不同的方法来处理:使用 responseText或者responseXML。responseText方法用于那些并非基于XML的格式。它把响应信息作为字符串,返回精确的 内容。纯文本、(X)HTML和JSON都使用responseText。在纯文本或HTML上使用这个方法是很简单的:

$.post(url,{index: $("#cityoption").get(0).selectedIndex},function(data){
    $('#area').html(data);});


   responseText不仅可以给页面添加内容,它在调试AJAX请求的时候也有用处。例如,你可能还没有准备好分析数据,因为你还不知道所有的标签 是什么样的,是XML格式的还是JSON文件。这就要求有一种用于检测被分析数据的途径。一旦你知道了所有的标签名称,所需要做的事情就只是编写代码 了。 

   responseXML的使用也相当简单。但是与JSON格式类似,XML要求进行数据分析。我们需要执行的第一项事务是识别出XML响应信息中的根节点。

var response = ajax.request.responseXML.documentElement;

  下一步,我们通过名称获取所有的元素并得到它们的值:

var header = response.getElementsByTagName(’header’)[0].firstChild.data;
var description = response.getElementsByTagName(’description’)[0].firstChild.data;
var sourceUrl = response.getElementsByTagName(’sourceUrl’)[0].firstChild.data;

  最后,我们把响应信息显示在相应的div标记中:

$(’body’).html("<b>" + header + "</b><br/>"
                 + description + "<br/><br/>"
                 + "<a href=’" + sourceUrl + "’>Download the source files</a>";


   用JavaScript的时候,JSON比XML要快一些,这是因为JSON所需要的分析代码比XML少很多,直接导致在分析大量数据的时候,JSON 的速度较快。JSON不如XML的地方在于XML受到的支持更大、服务器端开发选项更多。你可以根据环境和请求的用途来做出选择。 
    

posted @ 2012-09-12 15:48  王佩琪  阅读(5860)  评论(0编辑  收藏  举报