`

ajax开发中 response的contentType 问题

阅读更多
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 

普通文本 : text/plain
HTML代码 : text/html
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形式
Html代码 复制代码

   1. <script type="text/javascript"> 
   2.  var user = { 
   3.    name : "Tom", 
   4.    age : 12 
   5. }; 
   6. </script> 

<script type="text/javascript">
var user = {
   name : "Tom",
   age : 12
};
</script>


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


javascript形式
Javascript代码 复制代码

   1. var user = { 
   2.   name : "Tom", 
   3.   age : 12 
   4. ; 

var user = {
   name : "Tom",
   age : 12
};


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


json形式
Javascript代码 复制代码

   1. { 
   2.   name : "Tom", 
   3.   age : 12 

{
   name : "Tom",
   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处理应该没什么问题)

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

唉 又一篇蛮纠结于无聊细节的短文 就这样结束了

如有不对 还请斧正 谢谢了.
分享到:
评论

相关推荐

    Ajax中文乱码问题解决方案

    在实际开发中,可以结合使用以上方法来解决Ajax中文乱码问题。例如,可以使用jQuery的`$.ajax`方法,设置`contentType`和`dataType`属性,以及在成功回调函数中处理响应数据: ```javascript $.ajax({ url: 'your-...

    Ajax应用开发典型实例

    Response.ContentType = "application/json" Dim data data = "{'key': 'value'}" ' 返回JSON格式数据 Response.Write data %&gt; ``` ```javascript // 客户端的Ajax请求 var xhr = new XMLHttpRequest(); xhr....

    ajax get请求中文参数乱码解决

    在进行Web开发时,我们经常会遇到Ajax GET请求发送中文参数时出现乱码的问题。这个问题主要源于HTTP协议在处理非ASCII字符时的编码不一致。在本文中,我们将深入探讨这个问题,以及如何通过不同的方法来解决它。 ...

    ajax+jsp+servlet 中文解决方法

    在Web开发中,Ajax、JSP和Servlet是三个非常重要的技术。Ajax(Asynchronous JavaScript and XML)用于在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容,从而提升用户体验。JSP(JavaServer Pages)是...

    各种版本ajax使用方法及相关问题

    此外,跨域、缓存、安全、状态管理等问题也是Ajax开发中常见的挑战。正确设置请求头(如`Access-Control-Allow-Origin`),理解并使用缓存策略(如`cache: false`),以及妥善处理异步操作的顺序,都是确保Ajax成功...

    Ajax 2.0 Ajax 3.5

    Ajax 2.0 和 Ajax 3.5 是该技术的不同版本,它们在Web开发中扮演着重要角色,尤其是在提升用户体验方面。 Ajax 2.0 主要是基于微软的ASP.NET框架,它是对早期Ajax技术的一次重大升级。在ASP.NET 2.0中,微软引入了...

    ContentType大全

    在网页开发和服务器端编程中,正确设置`ContentType`能够确保数据以正确的格式被浏览器解析,从而避免出现乱码或其他显示问题。本文将深入探讨`ContentType`的用途、常见类型以及如何在不同环境中进行设置。 `...

    AJAX中文乱码解决

    在开发Web应用时,AJAX(Asynchronous JavaScript and XML)技术常常被用来实现页面的无刷新更新,提高用户体验。然而,当涉及到中文字符时,AJAX可能会遇到编码问题,导致中文显示为乱码。本教程将详细介绍如何解决...

    在vb.net (asp.net)中后台引用ajax函数的方法

    本文将详细介绍如何在后台引用AJAX函数,以VS2010 (VB.NET)作为开发工具,SQL Server 2000作为数据库进行演示。 首先,我们需要在项目中引入AJAX库。步骤S1涉及在项目中添加对`ajax.dll`的引用。这可以通过右键点击...

    jQuery Ajax过滤器

    本文将深入探讨jQuery中的Ajax过滤器及其在Ajaxform表单提交中的应用,以及如何解决可能出现的乱码问题。 首先,让我们理解什么是jQuery Ajax过滤器。在jQuery中,`ajaxSend`、`ajaxComplete`、`ajaxSuccess`、`...

    ajax页面交互ashx

    context.Response.ContentType = "application/json"; context.Response.Write(response); } public bool IsReusable { get { return false; } } } ``` 在这个例子中,我们从查询字符串获取参数,生成一个...

    完整C#ajax简单实现实例

    C#与Ajax的结合在现代Web开发中扮演着重要角色,尤其在构建动态、无刷新的用户界面时。Ajax(Asynchronous JavaScript and XML)技术允许前端与后台进行异步通信,提高了网页的交互性和用户体验。在这个"完整C# Ajax...

    解决ajax乱码和页面传值问题

    在Web开发中,Ajax(Asynchronous JavaScript and XML)技术被广泛用于实现页面的无刷新更新,提高用户体验。然而,随着其应用的普及,开发者经常遇到一些常见问题,如数据乱码和页面间值传递。本篇文章将深入探讨...

    ajax实现动态从数据库模糊查询显示到下拉框中(ajax方法返回Dataset的例子

    在Web开发中,Ajax(Asynchronous JavaScript and XML)技术被广泛用于实现页面的无刷新更新,提高用户体验。本文将详细讲解如何使用Ajax实现从数据库进行模糊查询,并将结果显示到下拉框(Dropdown List)中,这里...

    asp.net+jquery+ajax所有调用例子

    在这个“asp.net+jquery+ajax所有调用例子”中,我们将深入探讨如何结合这些技术来实现高效的用户交互。 首先,ASP.NET AJAX提供了UpdatePanel组件,使得页面的部分区域可以异步更新,而无需整个页面的回发。通过在...

    Ajax uri 乱码问题总结

    Ajax URI 乱码问题主要涉及浏览器差异和服务器配置两方面,尤其在处理非 ASCII 字符时,编码格式的不一致可能导致乱码。以下是对这个问题的详细解析和解决方案: 1. **浏览器差异**: - **Internet Explorer (IE)*...

    浏览器调试ajax请求

    在现代Web开发中,浏览器与服务器之间的通信是一个关键环节,特别是在使用Ajax技术进行异步数据交互时。Ajax(Asynchronous JavaScript and XML)允许我们在不刷新整个页面的情况下与服务器交换数据并更新部分网页...

    静态页中利用AJAX.NET实现无刷新页面

    在现代Web开发中,用户体验的重要性不言而喻,无刷新页面技术正是为了提升用户体验而诞生的一种创新手段。本文将深入探讨如何在静态页面中利用AJAX.NET实现无刷新页面,帮助开发者更好地理解这一技术。 首先,我们...

    ajax 获取文件路径

    在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种技术,它允许我们在不刷新整个页面的情况下,与服务器交换数据并更新部分网页内容。这里提到的"ajax jsp获取本地文件夹所有的路径"是一个示例,它展示了...

    c#网站中如何使用ajax技术演示

    在C#网站开发中,AJAX(Asynchronous JavaScript and XML)技术被广泛应用于创建交互性强、用户体验优秀的网页应用。AJAX允许在不刷新整个页面的情况下,通过后台与服务器交换数据并局部更新页面,提升了网页的响应...

Global site tag (gtag.js) - Google Analytics