$.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方式

server端java代码:



String name = new String(request.getParameter("name").getBytes("iso8859-1"),"utf-8");

clientjs代码:



$.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方式

server端java代码:



request.setCharacterEncoding("UTF-8");


String name = request.getParameter("name");

clientjs代码:



$.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之ajax中国乱码的解决方案的更多相关文章

  1. JQuery在Ajax的Post提交中国乱码的解决方案

    介绍: 在JQuery的Ajax POST要求,一个要求.中国的背景之中,乱码,如何解决呢? 问题简介: var regid = $('#oregion').combobox('getValue'); ...

  2. burp suite中国乱码的解决方案

    于http的response还有经常出现乱码,其实解决的办法很easy 首先点击Options标签, 然后找到display 找到http message display watermark/2/te ...

  3. JQuery中Ajax的Post提交中文乱码的解决方案

    出自:http://m.blog.csdn.net/blog/blueheart20/26370023 引言: 在JQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何 ...

  4. 在jQuery中Ajax的Post提交中文乱码的解决方案

    引言: 在jQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何解决呢? 问题的引入: var regid = $('#oregion').combobox('getV ...

  5. jquery的ajax()函数中文传值出现乱码完美解决方案

    1.        jquery的ajax()函数 $.ajax({ type: "POST", dataType: "text", url: ".. ...

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

    jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 代码如下: $.ajax({ dataType : ‘json', type : ‘POST', url : ‘http: ...

  7. [转载]JQuery的Ajax跨域请求的解决方案

    今天在项目中需要做远程数据加载并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究,发现JQuer ...

  8. JQuery中Ajax的Post提交在IE下中文乱码的解决方法

    原文地址:http://www.bitscn.com/pdb/ajax/316671.html 引言: 在JQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何解决呢? ...

  9. jQuery AJAX中文乱码处理

    最近工作中用jQuery ajax返回出现乱码,用的Notepad++编辑器,当JS部分传递中文时,另一页面接收的话会出现乱码,在网上找了很多方法,基本上没有很好的解决. 页面用GB2312编码,JS ...

随机推荐

  1. 嵌入式Linux下BOA网页server的移植

    **************************************************************************************************** ...

  2. IntelliJ IDEA中怎样使用JUnit4

     背景 近期參与了一个Anroid医疗项目,当中项目底层有非常多基础类及通讯类,并且非常多涉及复杂的字节操作还有多线程同步及状态机处理.这种项目做一下TDD还是必要的,尽量项眼下期把风险减少一些. ...

  3. TP 控制器扩展_initialize方法实现原理

    参考网址:http://gongwen.sinaapp.com/article-59.html 控制器扩展接口 系统Action类提供了一个初始化方法_initialize接口,可以用于扩展需要,_i ...

  4. SWT中Display和Shell是个什么东东

    Display:与操作系统沟通的桥梁 我们在前面说过,每个swt程序在最开始都必须创建一个Display对象.Display对象起什么作用呢?它是swt与操作系统沟通的一座桥梁.它负责swt和操作系统 ...

  5. Socket开发

    Socket开发框架之消息的回调处理 伍华聪 2016-03-31 20:16 阅读:152 评论:0     Socket开发框架之数据加密及完整性检查 伍华聪 2016-03-29 22:39 阅 ...

  6. ubuntu 系统设置bugzilla制

    随着时间的推移.在大脑中形成的记忆总会慢慢的淡去.人的记忆力就是这样.所以最好的办法就是形成博客去记录下来,一方面给自己以后回想用.一方面也算是自己的一个积累.所以一旦选择了一个行业,最好不要轻 易转 ...

  7. Windows Phone开发(2):竖立自信,初试锋茫

    原文:Windows Phone开发(2):竖立自信,初试锋茫 上一篇文章中,我们聊了一些"大炮"话题,从这篇文章开始,我们一起来学习WP开发吧. 一.我们有哪些装备. 安装完VS ...

  8. 你怎么知道你的网站K

    最近有朋友问我关于网站K问题,你怎么知道被提及哪些网站K方面.总结了六个方法后,,至于有没有其他办法.欢迎和我交流讨论. 检测方法是网站的搜索引擎惩罚:   首先要明白的是.搜索引擎不惩罚easy侦查 ...

  9. CentOS下tmux安装与使用

    tmux介绍: tmux它是BSDScreen替代品,相对于Screen,它更加先进:支持屏幕切分,并且具备丰富的命令行參数,使其能够灵活.动态的进行各种布局和操作.它能够做到一条命令就启动起来(强大 ...

  10. Codeforces554D:Kyoya and Permutation

    Let's define the permutation of length n as an array p = [p1, p2, ..., pn] consisting of n distinct ...