jQuery ajax在GBK编码下表单提交终极解决方法
2019-03-25 10:24:18 来源:沈阳软件公司 作者:沈阳软件开发
前言:
当jquery ajax在utf-8编码下(页面utf-8,接收utf-8),无任何问题。可以正常post、get,处理页面直接获取正确的内容。
但在以下情况下:
GBK -> AJAX POST ->GBK
UTF-8 -> AJAX POST ->GBK
后台代码无法获取正确的内容,通常表现为获取到奇怪字符、问号。
data:para,//参数设置
success:%20function(html){
}
});
通过上面代码可以知道,当设置了data时候,jquery内部会调用jQuery.param方法对参数encode(执行本应浏览器处理的encode)。
jQuery.param=function(%20a%20)%20{
var%20s%20=%20[%20];
function%20add(%20key,%20value%20){
s[%20s.length%20]%20=%20encodeURIComponent(key)%20+%20'='%20+%20encodeURIComponent(value);
};
//%20If%20an%20array%20was%20passed%20in,%20assume%20that%20it%20is%20an%20array
//%20of%20form%20elements
if%20(%20jQuery.isArray(a)%20||%20a.jquery%20)
//%20Serialize%20the%20form%20elements
jQuery.each(%20a,%20function(){
add(%20this.name,%20this.value%20);
});
//%20Otherwise,%20assume%20that%20it's%20an%20object%20of%20key/value%20pairs
else
//%20Serialize%20the%20key/values
for%20(%20var%20j%20in%20a%20)
//%20If%20the%20value%20is%20an%20array%20then%20the%20key%20names%20need%20to%20be%20repeated
if%20(%20jQuery.isArray(a[j])%20)
jQuery.each(%20a[j],%20function(){
add(%20j,%20this%20);
});
else
add(%20j,%20jQuery.isFunction(a[j])%20?%20a[j]()%20:%20a[j]%20);
//%20Return%20the%20resulting%20serialization
return%20s.join("&").replace(/%20/g,%20"+");
}//jquery.param%20end
上面是jQuery.param的代码,细心点可以留意到encodeURIComponent这方法,这是javascript内置的方法,对目标字符串执行utf-8%20encode,因此,当页面使用gbk编码时候,服务端会使用gbk进行解码,但实际提交的数据是以utf-8编码的,所以造成接收到内容为乱码或者为问号。
解决方法:
encodeURIComponent会以utf-8编码,在gbk编码下,可不可以以gbk进行编码呢?
“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与
我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同
其观点或证实其内容的真实性。
热门文章
使用“扫一扫”即可将网页分享至朋友圈。