jquery.ajax的url中传递中文乱码问题的解决方法
jquery
jquery默认的contenttype:application/x-www-form-urlencoded
这才是jquery正在乱码的原因,在未指定字符集的时候,是使用iso-8859-1
iso8859-1,通常叫做latin-1。latin-1包括了书写所有西方欧洲语言不可缺少的附加字符。
jquery的ajax根本没有考虑到国际化的问题,使用了欧洲的字符集,所以才引起了传递中文出现乱码的问题。
而我们的utf-8则可以解决这一问题。
最终指需要修改jquery的代码,显式声明contenttype使用utf-8字符集,即可解决gb2312中文传递的问题。
1. 修改jquery代码
只需要简单的将jquery的代码加以修改,加上charset=utf-8就可以了,这样不需要改变改什么web.config或什么在页面中改编码什么的了,也不需要用escapc(str)再在服务端解码。英文怎么传递,中文也怎么传递。
修改用到的jquery文件:jquery-1.4.4.min.js
ajaxsettings:{url:location.href,global:true,type:"get",contenttype:"application/x-www-form-urlencoded;charset=utf-8",processdata:true,async:true,xhr:function(){return new e.xmlhttprequest}
2. js代码:
. 代码如下:
function confirmcommit(){
var wlcompany = $("#wlcompany").val();//这里含有中文
var wlid = $("#wlid").val();
var proposer = $("#proposer").val();
if(confirm("确认要换货吗")){
$.ajax({
type:'post',
url:'${pagecontext.request.contextpath}/returngoods/confrimexchangegoods.do',
data:'wlcompany='+wlcompany+'&wlid='+wlid+'&proposer='+proposer, //直接传值
datatype:'text',
error:function(){
alert("jquery ajax error!");
},
success:function(msg){
alert(msg);
return;
if(msg=='换货成功'){
document.location="${pagecontext.request.contextpath}/orderitem/queryproduceitem.do?orderbustype="+${orderbustype};
}
}
});
}
}
3 .java代码:
. 代码如下:
public actionforward confrimexchangegoods(actionmapping mapping,
actionform form, httpservletrequest request,
httpservletresponse response) throws exception {
log.info("确认换货 confrimexchangegoods start...............");
response.setcharacterencoding("utf-8"); //这里要设置一下
string wlcompany = request.getparameter("wlcompany");
string wlid = request.getparameter("wlid");
string proposer = request.getparameter("proposer");
.....
}