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

代码如下:

$.ajax({

datatype : ‘json',type : ‘post',url : ‘https://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.",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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值