当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

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

发表于: 2012-10-16   作者:cuishen   来源:转载   浏览:
摘要: 最近遇到AJAX/JQuery 提交form表单出现乱码的问题,以下是我们项目中的解决方案。 client端AJAX/JQuery 提交表单,类似下面代码: --提交给action var dataString = 'subject=' + paramSubject + '&mailbody=' + paramMailBody; $(function(){
最近遇到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");

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号