前端小白求关于请求参数包含特殊符号(如"%")会报错的解决办法。

2021-03-26 11:13:57 +08:00
 gonethen

关键字 vue/axios/element-ui

团队遇到了传参报 400 的问题,初步断定是因为参数某个字段含有中文和"%"导致。因为不带"%"就不会报 400 错误。

使用了 post 请求。

2096 次点击
所在节点    问与答
11 条回复
Perry
2021-03-26 11:14:47 +08:00
encoding 做好了就不会有这问题
ayase252
2021-03-26 11:15:12 +08:00
urlencode
ayase252
2021-03-26 11:17:33 +08:00
我没审好题,我的锅。

如果参数在 URL 上,确保传出去的时候 URLEncode 一遍,那边再 decode 。
在 Body 中的应该不用,按约定来
wenzichel
2021-03-26 11:26:38 +08:00
所有的参数均`encodeURIComponent`再传给后端接口!
zhlssg
2021-03-26 11:35:17 +08:00
现在 get 请求如果有中文是会自己转换的吧
gonethen
2021-03-26 11:40:44 +08:00
@ayase252 #3 [![6j3478.png]( https://z3.ax1x.com/2021/03/26/6j3478.png)]( https://imgtu.com/i/6j3478)
这样算是已经 urlencode 了吧?
mhycy
2021-03-26 11:47:13 +08:00
% 需要转义成 %25,你的请求里面出现了两个%
gonethen
2021-03-26 11:53:48 +08:00
@wenzichel #4 axios.post 接受的是一个对象,encodeURIComponent 却需要传递一个字符串,该怎么用呢? qs.stringify?
eason1874
2021-03-26 12:02:09 +08:00
encodeURI 和 encodeURIComponent 都会转义 % ,可以正常传入 "测试%和 9"

你截图里显示没有转义,明显不是这两个其中一个的转义结果,应该是经过了其他处理,检查下吧。
wenzichel
2021-03-26 13:29:20 +08:00
@gonethen #8 是的
ysc3839
2021-03-26 15:08:30 +08:00
发代码看看吧,估计是你写的有问题。自己试了下,使用 axios 的 params 参数是不需要自己 encodeURI 的,会自动处理好。
https://jsfiddle.net/w6e75ydu/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/765336

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX