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-RSResource
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-RSResource后拿到的表单数据如果有中文就会有乱码。
解决方案其实很简单:
1.client端的js里面用encodeURIComponent方法encode表单数据,然后再ajax提交后台。
var dataString = 'subject=' + encodeURIComponent(paramSubject) + '&mailbody=' + encodeURIComponent(paramMailBody);
2.Server端Action或者JAX-RSResource使用下面的代码解码:
String mailbody = java.net.URLDecoder.decode(mailbody, "UTF-8");
相关推荐
wcqwcq 2020-06-26
delmarks 2020-06-14
ppsurcao 2020-06-14
tthappyer 2020-06-07
kentrl 2020-11-10
结束数据方法的参数,该如何定义?-- 集合为自定义实体类中的结合属性,有几个实体类,改变下标就行了。<input id="add" type="button" value="新增visitor&quo
ajaxyan 2020-11-09
zndy0 2020-11-03
学留痕 2020-09-20
learningever 2020-09-19
chongxiaocheng 2020-08-16
ajaxhe 2020-08-16
lyqdanang 2020-08-16
curiousL 2020-08-03