jquery方式提交中文乱码问题

来源:互联网 发布:mac上用的无线鼠标 编辑:程序博客网 时间:2024/04/28 06:04

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

现象如下:

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

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

本人未在firefox下测试,只是在ie8下碰到乱码现象。

无论是$.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!!!

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕晚期酮体2是怎么办 怀孕8个月贫血怎么办94 超了月经五天了怎么办 产检尿检有问题怎么办 42天了还有恶露怎么办 恶露42天不干净怎么办 产后42天同房出血怎么办 50多天还有恶露怎么办 55天恶露没干净怎么办 恶露56天没干净怎么办 孕晚期甘胆酸高怎么办 怀孕40周还没入盆怎么办 新买的被子臭味怎么办 被套洗了有异味怎么办 被子上有狐臭味怎么办 尿葡萄糖3个加怎么办 孕妇维c高了怎么办 孕妇吃了维生素c怎么办 尿潜血1十偏高怎么办 培养出b族链球菌怎么办 培养出b群链球菌怎么办 怀孕32周血压高怎么办 白带白细胞2个加怎么办 怀孕尿糖3个加号怎么办 黄疸高怎么办要怎么降 孕40周尿蛋白高怎么办 怀孕了尿蛋白高怎么办 尿蛋白2个加号怎么办 尿蛋白二个加号怎么办 孕妇尿蛋白3是怎么办 尿蛋白高 体检要怎么办 小三阳肝功能正常dna阳性怎么办 维生素c弱阳性该怎么办 体检ph值低了怎么办呀 明矾当泡茶喝了怎么办 怀孕三个月胎儿停止发育怎么办 怀孕ph值是5.0怎么办 孕25周胎盘前置怎么办 6个月孕妇贫血怎么办 24小时尿蛋白175怎么办 孕24周羊水少怎么办