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

最近遇到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-Type application/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");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值