jquery中⽂乱码的多种解决⽅法
1、使⽤$.ajax出现的中⽂乱码的解决⽅案:
复制代码代码如下:
var _realname = $("input[name='_searchName']").val();
var termcourseId = '<%=termid%>';
var classId = '<%=classid%>';
var url = "/addressbook/studentListNoPage.do";
//var dataUrl =
"formMap.TERMCOURSE_ID="+termcourseId+"&formMap.CLASS_ID="+classId+"&formMap.IS_ONLINE=all&formMap.REALNAME="+_realname;    $.ajax({
type: "POST",
url: url,
dataType:"json",
data: {
"formMap.TERMCOURSE_ID":termcourseId,
"formMap.CLASS_ID":classId,
"formMap.IS_ONLINE":"all",
"formMap.REALNAME":encodeURI(_realname)
},
contentType: "application/x-www-form-urlencoded; charset=utf-8",
success: function(data){
data = eval(data);
var html = "";
$("#allUnselectedUser").html(html);
},
error : function(XMLHttpRequest, textStatus, errorThrown){
alert(textStatus);
}
});
其中当使⽤dataUrl中的&⽅式提交时,⽆论前台是使⽤encodeURI或者encodeURIComponent⼜或者escape把中⽂转码,提交到Action中都是乱
码,并不是想要的%e6%b1%89%e5%ad%97这种转后编码。即使加上contentType也不⾏。
把dataUrl中的&⽅式提交修改为data:{name:value}的⽅式提交即可。
在Action中使⽤URLDecoder.decode(realname, "UTF-8")来转码即可转换为中⽂了。使⽤UTF-8是因为Jquery的提交⽅式默认为UTF-8,即使把contentType中的charset修改其他,例如GBK,后台也把U
TF-8修改GBK,都不能正确转换。
jQuery ajax乱码问题解决
⼀、测试环境
jQuery:1.3.2
tomcat:5.5.17
⼆、测试⽅法
1.使⽤get⽅式
服务器端java代码:
复制代码代码如下:
String name = new Parameter("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 = Parameter("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 (Header("X-Requested-With") != null && Header("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",
jquery ajax例子
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 (Header("RequestType") != null && Header("RequestType").equalsIgnoreCase("ajax"))) {        request.setCharacterEncoding("utf-8");
} else {
request.setCharacterEncoding("gbk");
}
chain.doFilter(request, response);
}