用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 description = response.getElementsByTagName(’description’)[0].firstChild.data;
var sourceUrl = response.getElementsByTagName(’sourceUrl’)[0].firstChild.data;
最后,我们把响应信息显示在相应的div标记中:
+ description + "<br/><br/>"
+ "<a href=’" + sourceUrl + "’>Download the source files</a>";
用JavaScript的时候,JSON比XML要快一些,这是因为JSON所需要的分析代码比XML少很多,直接导致在分析大量数据的时候,JSON 的速度较快。JSON不如XML的地方在于XML受到的支持更大、服务器端开发选项更多。你可以根据环境和请求的用途来做出选择。