专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > jQuery

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

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
jquery的ajax()函数传值中文乱码解决方法介绍
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, 
FilterChain 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); 
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • jQuery搜索框输入文字下拉揭示菜单

    jQuery搜索框输入文字下拉提示菜单 jQuery搜索框输入文字下拉提示菜单 原文地址: http://www.jq22.com/jquery-info6193 ...

  • 7个替开发者准备的有用的jQuery技巧

    7个为开发者准备的有用的jQuery技巧 一、在新窗口打开链接 用下面的代码,你点击链接即可在新窗口打开: $(document).ready(fu...

  • jQuery获取呼应Input例子

    jQuery获取相应Input例子 页面上有许多input框,使用的是EasyUI样式,中间还参杂着各种其他无id的Input框,如下: <input class=...

  • webpack 引出jquery和第三方jquery插件

    webpack 引入jquery和第三方jquery插件 1、引入jquery jQuery 直接在 html 中引入,然后在 webpack 中把它配置为全局即可。 index....

  • JQuery的开发与使用经验

    JQuery的开发与使用心得 关于jQuery的 入门使用jQuery可以很容易或具有挑战性的,这取决于你如何使用JavaScript,HTML,CSS进行开发和...

  • 深入学习jQuery卡通片控制

    深入学习jQuery动画控制 &times; 目录 [1]动画状态 [2]停止动画 [3]动画延迟[4]全局控制 前面的话   jQuery动画可以使用fade、...

  • jquery操作table报表

    jquery操作table表格 一、数据准备 <table id="table1"> <tr><th>文章标题</th><th>文章分类</th><th>发布时间</th><th>...

  • html + css + jquery实现简略的进度条实例

    html + css + jquery实现简单的进度条实例 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-eq...

  • jquery中ajax方法的datatype的功用

    jquery中ajax方法的datatype的作用 今天在维护一个项目的时候遇见了一个小问题。但是这个问题我认为对于项目十分有帮助。...

  • jQuery菜单示范(全选,反选,取消)

    jQuery菜单示例(全选,反选,取消) 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <titl...

热门推荐: