微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ajax 与 response 对应的关系 设置

ajax开发中,常遇到下面的几种情况:

1 服务端需要返回一段 普通文本给客户端
2 服务端需要返回一段 HTML代码给客户端
3 服务端需要返回一段 XML代码给客户端
4 服务端需要返回一段 javascript代码给客户端
5 服务端需要返回一段 json串给客户端

================================

对于每一种返回类型 规范的做法是要在服务端指定 response的contentType 的.
(当然 不指定绝大多数情况下也没什么问题 尤其是返回"非xml"的时候)

Java代码
  1. 普通文本:text/plain
  2. HTML代码:text/html
  3. XML代码:text/xml


以上三个可以说是毫无争议的,也没什么值得讨论的,
但是另外两种情况 就要注意一下了.


javascript 的 contentType 按最标准的写法 应该是 application/javascript.
而常用的 text/javascript 已经被 rfc定义为废弃的.
(参见 rfc4329)

但是 在这里暂时不建议使用 application/javascript .
大家还是继续使用 text/javascript 为好.
因为很多老旧浏览器并不支持 application/javascript .
而所有浏览器都支持 text/javascript.
在标准和广泛的兼容性之间 还是暂且选择后者吧.


json 的 contentType 常见写法有 : text/json & text/javascript .
但是 这个 text/json 其实是根本不存在的,
而 text/javascript 在有些时候客户端处理起来会有歧义.
对于json的contentType,rfc里定义的标准写法是 :application/json.
(参见 rfc4627)

在这里毫无疑问 我们应该选择标准写法的 application/json.

======================
也许有人会问,设置这些有什么用呢?
以前一些程序没有设置这些东西 运行的也很好啊.

首先必须承认的一点是,这些信息 在目前绝大多数情况下 确实不设置也可以.
但是这种做法是不规范不标准的.

未来对于复杂的ajax应用,不规范的行为是会带来很大的隐患.

举个例子.


对于同样的内容 可以有下面的3种形式

html形式
  1. <scripttype="text/javascript">
  2. varuser={
  3. name:"Tom",
  4. age:12
  5. };
  6. </script>

对于 html 形式,客户端得到数据后,往往是对其做dom操作.


javascript形式
Javascript代码
  1. varuser={
  2. name:"Tom",
  3. age:12
  4. ;

对于 javascript形式,往往是对其做eval操作:
eval(responseText);


json形式
Javascript代码
  1. {
  2. name:"Tom",
  3. age:12
对于 json形式,往往是对其做 eval操作之后 赋值给某变量: var clientvar= eval(responseText); 客户端拿到不同形式的代码要做的工作是不一样的. 如果没有设置 contentType 客户端很难判断 返回的数据是什么,该怎么处理. ========================== 另外,对于返回信息,如果不设置contentType,web服务器往往会给返回的内容添加一个"认的contentType",但是这个"认"会根据服务器的不同 以及web应用配置的不同而不同. 而浏览器对于没有足够头信息的返回值 也会做出"某些认行为(打开 或下载 或报错". 总之 不同浏览器 不同的浏览器设置 结果可能是不一样的 无法把控. 也就是说 当我们不指定正确的contentType时,我们所能做的只能是祈祷 在所有环境中,程序的表现是一致的,但是与其"祈祷"不如我们亲自把这些信息加上来得可靠. 所以 正确设置返回信息的 contentType 还是很有必要的. ====================== 总结 & 建议 : 1. 服务端 向 客户端 发送 JSON数据 时: Content-Type = 'application/json;charset=UTF-8' 2. 服务端 向 客户端 发送 JS 代码 时: Content-Type = 'text/javascript;charset=UTF-8' 3 服务端 判断 客户端 提交的是否是 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 满足上面4个条件中的 任意一个时,就可以认为提交的数据是 JSON数据. 之所以要提供4种选择 是因为 为了提供更好的兼容性. (我想没有人会提交真正的js代码到服务端 然后用服务端js引擎去解析执行吧? 即使真有这种需求 也可以在js代码外包一层 json格式的 wrapper,所以姑且都当作json处理应该没什么问题) ====================== 唉 又一篇蛮纠结于无聊细节的短文 就这样结束了 如有不对 还请斧正 谢谢了.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐