JQuery AJAX提交中文乱码的解决方案

所属分类: 网络编程 / JavaScript 阅读数: 1274
收藏 0 赞 0 分享

现象如下:

1)在Firefox下,处理页面的编码为gb2312,提交数据没有问题,中文能够正确解析;

2)在IE8下,处理页面的编码为gb2312,提交中文数据出现乱码。

无论是$.post还是$.ajax,抑或$.ajaxSubmit(来自于Form插件),在之前的UTF-8编码的网站都没有出现过任何问题, 看来是由于提交数据的网页的编码格式造成的了。不管怎么样,既然是浏览器之间存在差异,还是从HTTP包来看有什么问题吧。

打开Fiddle,分别用Firefox和IE做一个AJAX提交(以用户登录为例),检查他们的HTTP头,发现

1)两个浏览器提交的Form数据是一致的,都是进行了UTF-8的编码,如下图所示。


分析:JQuery的AJAX提交,会将要提交的数据进行编码,使用encodeURIComponent在js中处理数据。因此,无论是 Firefox或者IE,提交的数据都是一致的,都是UTF-8编码后的数据。

2)查看Header,发现Entity中的Content-Type存在差异

在Firefox中,Content-Type指定了字符集为utf-8。


而在IE8中,却没有任何的字符集指定。


分析:显然,默认情况下,AJAX的异步提交的字符编码应该和网页本身保持一致,也就是说,Server端在没有发现显示的charset指定的情 况下,使用gb2312来解码数据(但是数据在提交前已经被UTF-8编码了),这就是为什么在IE下会出现乱码的根源,而在Firefox下,浏览器在 提交AJAX数据的时候,加上了charset的显示指定,导致Server端采用UTF-8来解码数据(正确解码)。

推断:看来要解决这个中文乱码问题,就必须给AJAX异步提交指定显 示的charset!

马上查阅JQuery的AJAX工具函数的说明,发现options中有一个指定content-type的参数,给我的AJAX代码加上:

复制代码 代码如下:

jQuery(form).ajaxSubmit({
url: "ajax.aspx?a=memberlogin",
type: "post",
dataType: "json",
contentType: "application/x-www-form-urlencoded; charset=utf-8",
success: showLoginResponse
});

测试,OK!!!

更多精彩内容其他人还在看

JQuery AJAX提交中文乱码的解决方案

JQuery是一个非常优秀的框架,在特定场合下使用JQuery提交数据,相当的方便快捷。 但是,在处理一个GB2312编码的网站AJAX提交时,中文数据却成了乱码。
收藏 0 赞 0 分享

jquery.boxy插件的iframe扩展代码

jquery.boxy插件的iframe扩展
收藏 0 赞 0 分享

JSON JQUERY模板实现说明

用JSON从服务器端返回数据已是大家公认的标准,因为它短小精悍,使用方便.
收藏 0 赞 0 分享

js下利用userData实现客户端保存表单数据

对于多数网页制作的朋友,实现在客户端保存在网页表单上的信息,比较多的是采用Cookie技术来实现,这些功能例如:下拉列表框选择的选项,文本框输入的数据等。
收藏 0 赞 0 分享

Html中JS脚本执行顺序简单举例说明

写在最前面的最先执行,Body的onload事件要在页面加载完后才执行。
收藏 0 赞 0 分享

WEB高性能开发之疯狂的HTML压缩

一篇随笔中网友 skyaspnet 问我如何压缩HTML,当时回答是推荐他使用gzip,后来想想,要是能把所有的html,jsp(aspx)在运行前都压缩成1行未免不是一件好事啊。
收藏 0 赞 0 分享

高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现

在处理比较耗时的请求的时候,我们总希望先让用户先看到部分内容,让用户知道系统正在进行处理,而不是无响应。
收藏 0 赞 0 分享

javascript上下左右定时滚动插件

在网上找到的,我认为最为方便的一段定时滚动代码,找了很多其他的总是有这样那样的问题,好不容易找到的,就分享一下。
收藏 0 赞 0 分享

一个简单的js渐显(fadeIn)渐隐(fadeOut)类

最近发现项目用的表单验证不好使,干脆一边参考人家的一边自己写了一个。在验证有错误返回提示信息用到渐显(fadeIn)渐隐(fadeOut)过渡(因为浏览器的效率实在太高了,一下就蹦了出来~~);
收藏 0 赞 0 分享

一段批量给页面上的控件赋值js

一次性给页面上的控件赋值,控件的ID和数据库表字段对应一样,这样就一次性搞定了
收藏 0 赞 0 分享
查看更多