前台拼接中文参数乱码提交400报错后台无响应

问题描述: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 的副本。其中某些字符被替换成了十六进制的转义序列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值