AJAX JQuery 提交表单乱码有关问题解决方案
AJAX JQuery 提交表单乱码问题解决方案
最近遇到AJAX/JQuery 提交form表单出现乱码的问题,以下是我们项目中的解决方案。
client端AJAX/JQuery 提交表单,类似下面代码:
--提交给action
--或提交给JAX-RS Resource
对于FireFox来说,提交的表单的request的Content-Type会像下面这样:
请求提交后,首先经过filter
然后到了Action 或者 JAX-RS Resource后拿到的表单数据如果有中文就会有乱码。
解决方案其实很简单:
1. client端的js里面用encodeURIComponent方法encode表单数据,然后再ajax提交后台。
2. Server端Action 或者 JAX-RS Resource使用下面的代码解码:
怎么做》??
这么简单吗?
这么简单吗?
你试试不就知道了。
最近遇到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");
1 楼
freezingsky
2012-10-16
。。。。。。
2 楼
k10509806
2012-10-16
其实用编码过滤器就可以了。
3 楼
zengyan2012
2012-10-16
k10509806 写道
其实用编码过滤器就可以了。
怎么做》??
4 楼
xingkongxieyang
前天
为什么不用序列化表单元素。serializeArray()
5 楼
bei79
前天
xingkongxieyang 写道
为什么不用序列化表单元素。serializeArray()
k10509806 写道
其实用编码过滤器就可以了。
这么简单吗?
6 楼
xingkongxieyang
前天
bei79 写道
xingkongxieyang 写道
为什么不用序列化表单元素。serializeArray()
k10509806 写道
其实用编码过滤器就可以了。
这么简单吗?
你试试不就知道了。
7 楼
酷的飞上天空
前天
既然已经是post了
那就把ajax里面的data: dataString 改成data: {"subject":subject,"mailbody":mailbody}
然后后台添加一个CharacterEncodingFilter
一般不都是这样解决的么。
那就把ajax里面的data: dataString 改成data: {"subject":subject,"mailbody":mailbody}
然后后台添加一个CharacterEncodingFilter
一般不都是这样解决的么。