ajax responseType,ajax content-type

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: