Vue之axios请求踩坑记
在我们使用Vue框架的时候,我们不免会遇到各种各样的问题,话不多说。我们直接扔出我们的问题
Q1:POST请求时,后端无法接受到请求参数的问题
axios.post('/user', {
id: '2',
username: '4'
}).then(function(response) {
console.log(response)
}).catch(function(error) {
console.log(error)
})
从后台取数据发现没有取到数据,我们从请求头中发现,请求头为application/json
参数的格式是Request Payload
解决方法使用 qs
;
在项目中 npm install qs
引入qs
:
var qs = require('qs');
axios.post('/user', qs.stringify({
id: '2',
username: '4'
})).then(function(response) {
console.log(response)
}).catch(function(error) {
console.log(error)
})
请求头为application/x-www-form-urlencoded
参数的格式是 Form Data
qs.stringify
和JSON.stringify
的使用和区别
qs.stringify()
将对象 序列化成URL的形式,以&
进行拼接。
// 输出对比
var a = {name:'hehe',age:10};
qs.stringify(a) // 'name=hehe&age=10'
JSON.stringify(a) // '{"name":"hehe","age":10}'
Q2:POST请求时,请求参数出现在 url 后面的问题
这种情况明明是post请求,但是在请求的url中拼接了参数
如果出现这种问题基本上是:axios.create
使用自定义配置新建一个 axios 实例时进行post请求
的时候用了params
配置项。
- params 会将请求的参数拼接到url中去,用于get请求
- data 是添加到请求体(body)里面去,用于post请求
export function autoImport(data) {
return request({
url: '/Fjtk/autoImport',
method: 'post',
data // data 不会直接拼接到url
})
}
export function getfjTaskList(params) {
return request({
url: '/Fjtk/getfjTaskList',
method: 'get',
params // params 会直接拼接到url
})
}
由于时间仓促,错误与疏忽之处在所难免,希望各位朋友们以邮件的形式反馈问题给我,再次表示感谢!
- 作者:xmlwch
- 原文链接:https://m730.xmlwch.cn/2021/08/10/html/question.html
- 版权声明:本作品采用 知识共享 署名-相同方式共享 4.0 国际(CC BY-SA 4.0)许可协议 进行许可,转载无需与我联系,但请注明出处。