问题描述
在开发工作中遇到这样一个问题,后端接口定义的接口的格式为post,但是请求方式为form格式,先设置header中的Content-Type为application/x-www-form-urlencoded,并且在network中看到传参格式为form,但是后端接收到的数据却为空。
解决过程
请求发送后,我打开控制台一看,content-type,然后也是form data,没问题呀,妥妥的form格式传参呀,但是后台就是接收不到数据,我一度怀疑是后台键名是不是写错了,但是用postman测接口一点毛病都没有,哈哈哈,就肯定排除了人家那边的问题了,后来参考网上的一篇文章才发现问题,
原来axios在发送请求的时候会自动对数据进行一次JSON转换。所以我们虽然在network里面看到传参格式为form data,但是实际上并不是form格式,而是转成了json,我们可以看到控制台的form data 后面有个:,是因为转成json后作为键名,对应的键值并没有,而是空,所以后台接不到数据,
既然找到了问题所在,那么就好解决了,
继续看axios的文档。
哈哈哈,找到办法了,axios提供了属性,我们可以在传递数据之前做一次处理就ok啦
import qs from 'qs'
{
transformRequest: [function (data) {
return (data)
}]
}
- 1
- 2
- 3
- 4
- 5
- 6
虽然axios中带了qs,可以不用下载,但是用的时候还是需要引用一下的呀。
在axios中的config配置项中配置一下,处理一下数据就可以了。
处理好了以后,在来一次请求。
这样就没有问题了,成功请求到数据。
参考文章:Vue乱搞系列之axios发起表单请求