前段html通过js拼接url?name=XXX&gender=XXX,然后调用jQuery的ajax,往后台传参数,前端alert参数是正常的,后端的参数是乱码

前段html通过js拼接url?name=XXX&gender=XXX,然后调用jQuery的ajax,往后台传参数,前端alert参数是正常的,后端的参数是乱码,怎么办?

name参数,“中国”变成了“中国”


原因:

从http请求报文的角度分析原因:

1因为是get请求所导致(什么是get请求?即将参数放在url?name=XXX&type=XXX的后面),这样浏览器是不会对参数进行UrlEncode编码的

如果是post请求(form表单中的值、jQuery的ajax的data参数,都是post请求),则参数不会出现这个问题,因为浏览器会对所有参数(仅仅对参数进行编码,其他的都不变,包括?前面的,=前面的)进行UrlEncode编码

UrlEncode编码前:

如http://127.0.0.1:8080/testProject/test/getSearchResult?name=Tom&gender=男

UrlEncode编码后:

http://127.0.0.1:8080/testProject/test/getSearchResult?name=Tom&gender=%E7%94%B7

(?前面的,=前面的都不编码,英文也保持原样,不编码)

2一般的研发框架,如spring mvc、struts、jfinal等,都会提供获取参数的方法如this.getPara("Name"),这些方法其实否是框架封装过的,是经过UrlEncode码的。

既然发现了问题,那么就在前段,通过js即jQuery对中文参数人工进行UrlEncode编码不就行了,仅仅需要一段代码。




然而结果还是不行,我改变了一种传参的方式,即将get方式,换成post方式,瞬间就行了。所以,最好不用、最好绝对不用get方式,要用post方式






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值