ajax responseType,ajax content-type
纠结于ajax开发中响应的contentType问题博客分类:web前端ajaxjsonJavaScriptjQuery应用服务器Ajax开发中,经常会遇到以下情况:
1服务器需要向客户端返回一个普通的文本。
服务器需要向客户端返回一段HTML代码。
服务器需要向客户机返回一段XML代码。
4服务器需要返回一个javascript代码给客户端。
5服务器需要向客户端返回一个json字符串
================================
对于每个返回类型规范,应该在服务器端指定响应的contentType。
(当然,如果不指定它,大多数情况下没有问题,特别是当返回‘非XML’时)
Java代码纯文本:文本/纯HTML代码:文本/htmlXML代码:文本/xml
以上三条可以说是没有争议的,也没有什么值得讨论的,
但是要注意另外两种情况。
javascript的contentType最标准的方式应该是application/javascript。
常用的text/javascript已经被rfc定义为过时。
(参见rfc4329)
不过这里暂时不推荐应用/javascript。
你最好继续用text/javascript。
因为很多老浏览器不支持应用/javascript。
而且所有浏览器都支持文本/javascript。
在标准和广兼容之间暂时选择后者吧。
编写json的contentType的常用方法有:text/json text/javascript。
但是这个text/json实际上根本不存在,
然而,当由客户端处理时,文本/javascript有时是不明确的。
对于json的内容类型,RFC中定义的标准编写方式是:application/json。
(参见rfc4627)
毫无疑问,我们应该选择标准的编写应用程序/json。
======================
可能有人会问,设置这些有什么用?
有些程序以前没有设置过,这些东西很好用。
首先必须承认,目前大多数情况下都可以设置这个信息。
但这种做法并不标准。
对于未来复杂的ajax应用,不规范的行为会带来很大的隐患。
举个例子。
相同的内容可以有以下三种形式
Html表单
code html script type= text/JavaScript varuser={ name: Tom ,年龄:12 };/脚本
对于html表单,客户端获取数据后,往往会对其进行dom操作。
Javascript表单
Code varuser={name:Tom ,年龄:12;
对于javascript形式,它通常被评估为:
eval(responseText);
Json表单
Javascript代码{姓名:汤姆,年龄:12岁
对于json表单,它通常被赋值,然后赋给一个变量:
var client var=eval(responseText);
客户为获得不同形式的代码所做的工作是不同的。
如果没有设置contentType客户端,很难判断返回的数据是什么,如何处理。
==========================
此外,对于返回的信息,如果没有设置contentType,web服务器通常会在返回的内容中添加一个“默认内容类型”。
但是这个‘默认’会根据不同的服务器和不同的web应用配置而有所不同。
浏览器也会对没有足够头信息的返回值做一些默认行为(打开或下载或报错)。
简而言之,不同浏览器的浏览器设置不同,可能会产生不可控的不同结果。
也就是说,当我们没有指定正确的contentType时,我们所能做的就是祈祷程序的性能在所有环境下都是一致的,
但与其‘祈祷’,不如我们自己把这些信息加起来。
因此,需要正确设置返回信息的contentType。
======================
总结:
1.
当服务器向客户端发送JSON数据时:
content-Type= application/JSON;charset=UTF-8
2.
当服务器向客户端发送JS代码时:
content-Type= text/JavaScript;charset=UTF-8
三
判断客户端是否提交JSON数据时:
content-Type= application/JSON;charset=UTF-8
content-Type= text/JSON;charset=UTF-8
content-Type= text/JavaScript;charset=UTF-8
content-Type= application/JavaScript;charset=UTF-8
只要Content-Type满足以上四个条件中的任何一个,提交的数据就可以被认为是JSON数据。
提供四种选择的原因是为了提供更好的兼容性。
(我想不会有人把真正的js代码提交给服务器然后用服务器js引擎解析执行吧?
即使有这样的需求,你也可以用JSS代码外包一个json格式的包装器,
所以我们就把它们都当做json吧。)
======================
唉,又一篇比较纠结于无聊细节的短文,就这样结束了。
如有不妥,请指正。谢谢你。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。