惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
博客园 - 司徒正美
C
Check Point Blog
G
Google Developers Blog
The GitHub Blog
The GitHub Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
有赞技术团队
有赞技术团队
P
Proofpoint News Feed
IT之家
IT之家
B
Blog
博客园_首页
量子位
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
J
Java Code Geeks
H
Help Net Security
A
About on SuperTechFans
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
D
DataBreaches.Net
Y
Y Combinator Blog
大猫的无限游戏
大猫的无限游戏
云风的 BLOG
云风的 BLOG
Google DeepMind News
Google DeepMind News

博客园 - Robin

[原创]JQuery的Validation插件中Remote验证的中文问题 - Robin - 博客园 使用JQuery实现Web弹出编辑框 SQL Server 2005中显示SQL Server 2000数据库关系图 以下文件中的行尾不一致,要将行尾标准化吗?+乱码 Petshop4.0安装问题 SQL Server 2005安装问题(不断更新) 让小红点Trackpoint在Office 2007和IE 7中滚动起来 无法访问XP机器的问题解决办法 office 2007中使用Mathtype的方法 微软的正版验证补丁破解 StartupPath与GetCurrentDirectory的区别 [翻译]运用文件解析器在任意文件中使用虚拟应用路径(~) [转载]补丁安装过程中常见问题 [转]Asp.Net 学习资源列表 [翻译]SQL Server 该做和不该做的 ASP.NET MasterPage 中图片路径的解决办法 [译]Netties使用说明 [转载]开源运动:为谁而战? Linux学习(1)
JQuery AJAX提交中文出现乱码的解决方案
Robin · 2010-07-02 · via 博客园 - Robin

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

现象如下:

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代码加上:

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

测试,OK!!!