您的位置:首页 > Web前端 > JQuery

jquery的ajax()函数传值中文乱码解决方法介绍

2015-09-11 11:58 561 查看
jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下   <iframe id="cproIframe_u2298924_2" src="http://pos.baidu.com/acom?adn=3&amp;adp=1&amp;at=0&amp;aurl=&amp;c01=1&amp;cad=1&amp;ccd=24&amp;cec=GBK&amp;cfv=15&amp;ch=0&amp;col=zh-CN&amp;conBW=0&amp;conOP=1&amp;cpa=1&amp;cpro_lu=1%2C%23dfe4f9%2C%23000000%2C%E5%AE%8B%E4%BD%93&amp;dai=2&amp;dis=0&amp;layout_filter=image&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DVxxd05LuAtqrdzLWQIEwStKOaVX_o1f07mAZZHvjgVWcJ0abhQvr9dUpqNi0QDKd%26wd%3D%26eqid%3Da3683b5b000eedf80000000555f24d3c&amp;ltu=http%3A%2F%2Fwww.jb51.net%2Farticle%2F31791.htm&amp;lu_161=0&amp;lunum=6&amp;n=jb51_cpr&amp;pat=1&amp;pcs=1903x955&amp;pih=80&amp;pis=10000x10000&amp;piw=130&amp;ps=491x486&amp;psr=1920x1080&amp;pss=1903x492&amp;ptbg=90&amp;ptp=0&amp;ptt=0&amp;qn=d4d4996019358114&amp;rad=&amp;rsi0=650&amp;rsi1=200&amp;rsi5=4&amp;rss0=%23FFFFFF&amp;rss1=%23FFFFFF&amp;rss2=%23000000&amp;rss3=%23444444&amp;rss4=%23008000&amp;rss5=&amp;rss6=%23e10900&amp;rss7=&amp;scale=&amp;skin=tabcloud_skin_5&amp;stid=5&amp;td_id=2298924&amp;tft=0&amp;titFF=%25E5%25BE%25AE%25E8%25BD%25AF%25E9%259B%2585%25E9%25BB%2591&amp;titFS=14&amp;titSU=0&amp;titTA=left&amp;tlt=0&amp;tn=baiduCustNativeAD&amp;tpr=1441943749714&amp;ts=1&amp;version=2.0&amp;xuanting=0&amp;dtm=BAIDU_DUP2_SETJSONADSLOT&amp;dc=2&amp;di=u2298924&amp;ti=jquery%E7%9A%84ajax()%E5%87%BD%E6%95%B0%E4%BC%A0%E5%80%BC%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95%E4%BB%8B%E7%BB%8D_jquery_%E8%84%9A%E6%9C%AC%E4%B9%8B%E5%AE%B6&amp;tt=1441943749706.66.116.117" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" align="center,center" width="650" height="200"></iframe> 复制代码代码如下:
$.ajax({ 
  dataType : ‘json',type : ‘POST',url : ‘http://localhost/test/test.do',data : {id: 1, type: ‘商品'},success : function(data){ } } ); 
问题: 
提交后后台action程序时,取到的type是乱码 
解决方法: 
方法一:提交前采用encodeURI两次编码,记住一定是两次 
1.修改以下代码 
复制代码代码如下:
data:{id:1, type:encodeURI(encodeURI(‘商品'))} 
2.在后台action里要对取得的字符串进行decode 
1、String type = request.getParameter(“type”); 
2、type = URLDecoder.decode(type, “UTF-8″); 
方法二:ajax配置contentType属性,加上charset=UTF-8 
在ajax方法中加入以下参数 
contentType: “application/x-www-form-urlencoded; charset=UTF-8″使用其它js框架或者xhr都是差不多,设置header中contentType即可, 
这里关键是charset=UTF-8,如果没有这个,是不行的,默认jQuery里的contentType是没有的 

一、测试环境 
jQuery:1.3.2 
tomcat:5.5.17 
二、测试方法 
1.使用get方式 
服务器端java代码: 
复制代码代码如下:
String name = new String(request.getParameter("name").getBytes("iso8859-1"),"utf-8"); 
客户端js代码: 
复制代码代码如下:
$.ajax({url: "2.jsp",type: "get",data: {name:"中文"},success: function(response){ 
alert(response); 
}}); 
结果:正确显示 
复制代码代码如下:
$.ajax({url: "2.jsp",type: "get",data: "name=中文",success: function(response){ 
alert(response); 
}}); 
结果:乱码 
复制代码代码如下:
$.get("2.jsp", { name: "中文" },function(response){ 
alert(response); 
}); 
结果:正确显示 
复制代码代码如下:
$.get("2.jsp", "name=中文",function(response){ 
alert(response); 
}); 
结果:乱码 

2.post方式 
服务器端java代码: 
复制代码代码如下:
request.setCharacterEncoding("UTF-8"); 
String name = request.getParameter("name"); 
客户端js代码: 
复制代码代码如下:
$.ajax({url: "3.jsp",type: "post",data: "method=testAjaxPost&name=中文",success: function(response){ 
alert(response); 
}}); 
结果:正确显示 
复制代码代码如下:
$.ajax({url: "3.jsp",type: "post",data: {name:"中文"},success: function(response){ 
alert(response); 
}}); 
结果:正确显示 
复制代码代码如下:
$.post("3.jsp", { name: "中文" },function(response){ 
alert(response); 
}); 
结果:正确显示 
复制代码代码如下:
$.post("3.jsp", "name=中文",function(response){ 
alert(response); 
}); 
结果:正确显示 
三、使用filter 
复制代码代码如下:
public void doFilter(ServletRequest request, ServletResponse response, 
FilterCha 20000 in chain) throws IOException, ServletException { 
HttpServletRequest req = (HttpServletRequest) request; 
if (req.getHeader("X-Requested-With") != null && req.getHeader("X-Requested-With").equalsIgnoreCase("XMLHttpRequest")) { 
request.setCharacterEncoding("utf-8"); 
} else { 
request.setCharacterEncoding("gbk"); 

chain.doFilter(request, response); 

jQuery在使用ajax的时候会在header中加入X-Requested-With,值为:XMLHttpRequest,filter中判断是jQuery的ajax请求时就把字符编码设为utf8,这样可以解决post提交中的中文乱码问题,不需要在代码中设置request.setCharacterEncoding("UTF-8"); 
对于get方式的中文乱码问题,建议不使用get方式提交中文,统统改为post ^-^ 

为了和prototype.js处理中文的方式一致,可以使用如下的方式,自定义header中的属性RequestType 
复制代码代码如下:
$.ajax({ 
url: "3.jsp", 
type: "post", 
data: {name:"中文"}, 
beforeSend: function(XMLHttpRequest){ 
XMLHttpRequest.setRequestHeader("RequestType", "ajax"); 
alert("开始"); 
}, 
success: function(data, textStatus){ 
alert(data); 
}, 
error: function(XMLHttpRequest, textStatus, errorThrown){ 
alert("错误:" + textStatus); 
}, 
complete: function(XMLHttpRequest, textStatus){ 
alert("完成:" + textStatus); 

}); 
filter代码如下: 
复制代码代码如下:
public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException { 
HttpServletRequest req = (HttpServletRequest) request; 
if (req.getHeader("RequestType") != null && req.getHeader("RequestType").equalsIgnoreCase("ajax"))) { 
request.setCharacterEncoding("utf-8"); 
} else { 
request.setCharacterEncoding("gbk"); 

chain.doFilter(request, response); 
}  阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: