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

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

代码如下:

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

测试,OK!!!

时间: 2024-10-12 02:33:25

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

在jQuery中Ajax的Post提交中文乱码的解决方案(转)

引言: 在jQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何解决呢? 问题的引入: var regid = $('#oregion').combobox('getValue'); //var sname = $('#sname').val(); var sname = encodeURI($('#sname').val(),"UTF-8"); if(regid!=""&&regid!='undefined'){ $

Jquery Mobile Ajax 提交 中文乱码问题

几百个字段都是中文名,Ajax提交时,参数名也是中文,传值接收一直乱码, 于是乎: 前端:encodeURIComponent(encodeURIComponent(参数)) 后台:URLDecoder.decode(s,"utf-8") 终于解决了乱码问题...

JQuery中Ajax的Post提交中文乱码的解决方案(转)

引言: 在JQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何解决呢? 问题的引入: var regid = $('#oregion').combobox('getValue');            //var sname = $('#sname').val();            var sname = encodeURI($('#sname').val(),"UTF-8");            if(regid!=""

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

出自:http://m.blog.csdn.net/blog/blueheart20/26370023 引言: 在JQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何解决呢? 问题的引入: var regid = $('#oregion').combobox('getValue');             //var sname = $('#sname').val();             var sname = encodeURI($('#sname')

jquery使用ajax提交中文乱码问题的解决

$.ajax({       type : 'get',       cache : false,      url : 'custact.php',       data : {act: 'update', inputName: name, inputSex: sex, inputCardNo: cardNo, inputAddr: addr, inputCardId: cardId},       contentType : "application/x-www-form-urlencode

spring mvc通过jQuery ajax传值中文乱码问题

今天开发的时候遇到这个问题,记性差,记下来先. 1.设置web.xml,添加utf-8拦截器 <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name&

ajax提交后台乱码,IE会乱码其他浏览器不会

<script type="text/javascript"> $(document).ready(function(){ $(".a-btn2").click(function(){ var url = "person.dragon.cases(1)"; $.ajax({ url : url, type : 'POST', data : {'text1':'开始加载信息代码'}, //contextType : "appl

AJAX的中文乱码问题

/***********本人原创,欢迎转载,转载请保留本人信息*************/作者:wallimn电邮:[email protected]博客:http://blog.csdn.net/wallimn时间:2006-11-15/***********本人原创,欢迎转载,转载请保留本人信息*************/ 今天终于解决了AJAX的中文乱码问题,写篇文章来帮助一下有同样问题的朋友们.我的开发环境:XP, eclipse,使用GB18030编码. 当遇到这个问题时,到网上去查了

JSP中文乱码问题解决方案

1.项目工程编码统一采用UTF-8编码 2.JSP页面采用UTF-8编码 <%@ page language="java" import="java.util.*,entity.Student" pageEncoding="UTF-8"%> 3.设置request内置对象采用utf-8编码,防止表单提交产生信息乱码(POST方式提交) request.setCharacterEncoding("utf-8"); 4