六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 31|回复: 0

AJAX JQuery 提交表单乱码问题解决方案

[复制链接]

升级  22.67%

18

主题

18

主题

18

主题

秀才

Rank: 2

积分
84
 楼主| 发表于 2013-1-23 01:15:59 | 显示全部楼层 |阅读模式
最近遇到AJAX/JQuery 提交form表单出现乱码的问题,以下是我们项目中的解决方案。

client端AJAX/JQuery 提交表单,类似下面代码:
--提交给action
var dataString = 'subject=' + paramSubject + '&mailbody=' + paramMailBody;  $(function(){        $.ajax({                     type: "POST",              url: '<%=request.getContextPath()%>/app/xxx/saveDraft.do',     data: dataString,   processData: false,      success: function(){}});return false; });
--或提交给JAX-RS Resource
var dataStr = "&subject="+subject+"&mailbody="+mailbody;$.ajax({url:urlPath,data: dataStr,type:'POST',dataType:'json',contentType:'application/x-www-form-urlencoded',success:function(data, status, xhr) {},error:function(xhr,error,exception) {exception.toString();}});

对于FireFox来说,提交的表单的request的Content-Type会像下面这样:
Content-Typeapplication/x-www-form-urlencoded;charset=UTF-8

请求提交后,首先经过filter
request.setCharacterEncoding("UTF-8");

然后到了Action 或者 JAX-RS Resource后拿到的表单数据如果有中文就会有乱码。

解决方案其实很简单:
1. client端的js里面用encodeURIComponent方法encode表单数据,然后再ajax提交后台。
var dataString = 'subject=' + encodeURIComponent(paramSubject) + '&mailbody=' + encodeURIComponent(paramMailBody);
2. Server端Action 或者 JAX-RS Resource使用下面的代码解码:
String mailbody = java.net.URLDecoder.decode(mailbody, "UTF-8");
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表