JQuery Ajax发送GET请求乱码的解决办法
前一阵子使用JQuery Ajax做的一个注册表单需要传送中文字符给WebService,发送的是”GET”请求,发过去后在WebService这边看到的都是乱码,摸索了一阵子,找到了如下的解决方案:
var data = {
UserName: escape(your user name here),
Password: escape(your password here),
};
var jsonStr = JSON.stringify(data); // the json2 method.
$.ajax({
url: '../Service.asmx/Login',
data: 'userinfo=' + jsonStr,
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
type: "GET",
success: function(response) {
…
},
error: function(a, b, c) {
…
}
});
这个方案就是使用javascript的escape方法来对中文字符进行编码,然后到WebService那里会自动解码成为中文。
今天又碰到了另外一个问题:用JQuery Ajax GET传送瑞典字符等Unicode字符出现乱码,即便是用了escape也无济于事。
思考: 通过GET方法发送的请求实际上还是通过URI来传送参数的,那么GET方式传送的字符就与文件设定的编码格式无关了,完全是由URI来决定传送的是什么,那么如果对URI进行编码呢?
事实上,javascript已经有这样的全局函数来实现对URI的编码了:encodeURI(uri),让JQuery Ajax发送一个由URI编码好的数据就不会出现乱码了,而且在WebService端还能自动对数据进行decode.
改善后的代码如下:
var data = {
UserName: encodeURI(your user name here),
Password: encodeURI(your password here),
};
var jsonStr = JSON.stringify(data); // the json2 method.
$.ajax({
url: '../Service.asmx/Login',
data: 'userinfo=' + jsonStr,
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
type: "GET",
success: function(response) {
…
},
error: function(a, b, c) {
…
}
});
这个改进后的方案不仅仅对中文字符有效,而且对其他的Unicode字符都可以有效的解决乱码问题。

四月 22nd, 2010 at 9:28 上午
this post is very usefull thx!
[回复]
六月 20th, 2010 at 2:33 下午
我也遇到了这样的问题
我该用POST方法就好了
之前在ff chrome 都是好的
只有在IE上出现了乱码
[回复]
六月 20th, 2010 at 4:17 下午
@guest, 恩,是的,因为GET实际上是通过URL来做数据传输的,所以设置的utf-8编码是不起作用的,但是对POST的数据起作用;
这个还取决于不同浏览器对URL的编码方式不一样?
[回复]