问题描述:JSP中使用ajax get方式提交表单数据请求,使用英文参数浏览器正常拼接和调用后台接口,输入中文参数拼接乱码,显示400报错,后台打断点无响应。
解决思路:网友提示说将参数使用encodeURI()处理,不然浏览器会根据默认的编码格式进行提交,不同浏览器默认的编码格式有所不同。换成chrome提交也是乱码,也使用encodeURI()对中文参数编码,可是结果还是中文参数拼接错误。又在代码中发现了问题,在拼接参数时对参数进行了escape()处理,其中某些字符被替换成了十六进制的转义序列。将该方法去掉就可以中文提交入库了,问题解决!
Ajax表单提交代码如下:
$.ajax({
//url : "http://sso.zk.com/user/check/"+escape(usr)+"/1?r=" + Math.random(),
url : "http://sso.zk.com/user/check/"+usr+"/1?r=" + Math.random(),
dataType : "jsonp",
success : function(data) {
checkusr = data.data?"1":"0";
if (!data.data) {
validateSettings.succeed.run(option);
namestate = true;
}else {
validateSettings.error.run(option, "该用户名已占用!");
namestate = false;
}
}
});
解决方法总结:
1.去掉参数拼接中的escape()函数,使参数直接拼接
2.使用Javascript中的encodeURI()函数对参数进行处理,以此适应不同浏览器默认的编码提交格式。
小结:
encodeURI():可把字符串作为 URI 进行编码。更改默认编码格式,解决不同浏览器兼容性问题。
escape():其返回值为已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。