有个 js 小问题请教下,如下图

2020-07-30 15:02:33 +08:00
 gaocc

qs.stringify()处理了入参,为什么 form data 会带个双引号??

2955 次点击
所在节点    问与答
29 条回复
gaocc
2020-07-30 15:03:11 +08:00
老哥们解答下小弟疑惑
mugglezzz
2020-07-30 15:13:00 +08:00
JSON.stringify()?
pouta
2020-07-30 15:22:44 +08:00
把代码发出来看看
xg4
2020-07-30 15:24:41 +08:00
FormData 你发送 JSON 字符串当然有问题啊
wunonglin
2020-07-30 15:25:46 +08:00
为什么你们传表单不用 FormData,我是很疑惑
xg4
2020-07-30 15:28:14 +08:00
headers 改为 content-type: application/json,就可以正确发送 json 字符串
renmu123
2020-07-30 15:31:31 +08:00
注意这是 formdata 而不是 request json,new formdata ()就可以了
gaocc
2020-07-30 15:45:03 +08:00
qs.stringify({
// ...params
login_type: 'xx',
email: 'xxx,
}
用的 qs
gaocc
2020-07-30 15:45:53 +08:00
@xg4 后台 api 就是 application/x-www-form-urlencoded,不能用 application/json
gaocc
2020-07-30 15:48:23 +08:00
if (this.typeData === 'post') {
// post 请求,后台接收 form-data 请求类型的参数
let params = this.getParams()
let sign = this.signHmacSha(params)
params[this.signature] = sign
let url = this.url[this.radioData]
let header = Object.assign(this.headers, {'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'})
this.axios.post(url, qs.stringify({
login_type: 'email',
email: 'xxxxx',
password: 'xxxxx'
}, {indices: false}), {
headers: header
}).then((resp) => {
this.outParams = JSON.stringify(resp)
}).catch((response) => {
this.outParams = JSON.stringify(response)
console.log(response)
})
}
wunonglin
2020-07-30 15:53:16 +08:00
```js
const form = new FormData()
form.append('login_type', 'email')
form.append('email', 'xxxxx')
form.append('password', 'xxxxx')

this.axios.post(this.url[this.radioData], form, {
indices: false
}), {
headers: {...this.headers, 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'}
})
```

这样不行???
gaocc
2020-07-30 15:57:08 +08:00
@wunonglin qs.stringify 和你那个都是一样的,都是处理参数成 xx=1&yy=2 这种。正常处理成这就 ok 了,现在有个“”,我不明白
wunonglin
2020-07-30 16:02:44 +08:00
@gaocc #12 你点 view source,是表单就行。你问你后端有没有收到啊
gaocc
2020-07-30 16:09:39 +08:00
@wunonglin
![image.png]( https://i.loli.net/2020/07/30/cTRtf6GpjsJzx9Q.png)

后台 400,有必填的参数没给,就是没收到
a516307724
2020-07-30 16:17:37 +08:00
用 qs 不会出现这问题的你看看你自己的参数是不是自己带了双引号
gaocc
2020-07-30 16:22:15 +08:00
@a516307724 上面有请求的代码可以看下,没有给双引号。
人为操作想在 form data 加“”都不好搞吧
wunonglin
2020-07-30 16:24:28 +08:00
@a516307724 #15

这都不是 form,这样才是 https://i.loli.net/2020/07/30/WjMqAz3gwOKbE6Z.png

你用 formdata 发送啊用 qs 干吗
SakuraKuma
2020-07-30 16:25:51 +08:00
是不是 axios 的 interceptors 加了点啥?
wunonglin
2020-07-30 16:27:14 +08:00
@gaocc #12 不用手动指定 Content-Type,用 axios 发送 formdata 它会自己处理
gaocc
2020-07-30 16:44:57 +08:00
@SakuraKuma
没,请求的拦截器都没做处理

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

https://www.v2ex.com/t/694344

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

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

© 2021 V2EX