前段html通过js拼接url?name=XXX&gender=XXX,然后调用jQuery的ajax,往后台传参数,前端alert参数是正常的,后端的参数是乱码
前段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方式。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)