出现这个问题是因为在使用axios的时候,数据格式不正确的原因
网上解决方案很多,我依次试了下,只有使用URLSearchParams处理axios发送的数据可以正常请求回来结果,使用qs方案我本地还是不能解决。
URLSearchParams
解决方法:
let param = new URLSearchParams();
param.append('pageNum', this.pageNo);
param.append('queryString', this.keyWords);
console.log(param);
this.$axios({
method: 'post',
url:'/search/goods',
data:param
}).then((response)=>{...}
这种方法比较简单,技术文章中普遍提到需要注意: URLSearchParams 不支持所有的浏览器,总体的支持情况还ok,我查了下浏览器兼容情况,普遍支持,发现qq浏览器不支持,但是在我本地测试是没问题的,而且qq浏览器兼容情况是2017年的版本应该是没有更新的缘故。
使用qs
主要参考了如下文章得解决方式
- axios post请求,传递参数,后台接收不到数据
- axios 发 post 请求,后端接收不到参数的解决方案
- Vue乱搞系列之axios发起表单请求
- axios 使用post方式传递参数,后端接受不到
- 使用URLSearchParams处理axios发送的数据
代码如下,但是请求回来的结果无数据,还没找到原因。
import qs from 'qs';
import axios from 'axios';
export default{
data(){
return{}
},
mounted(){
this.onLoad()
},
methods:{
onLoad() {
let postData = qs.stringify({
"pageNum":1,
"districtId":3,
"pageSize":15,
"queryString":"肉"
});
console.log(postData);//pageNum=1&districtId=3&pageSize=15&queryString=%E8%82%89
axios({
method: 'post',
url:'/search/goods',
headers:{'Content-Type':'application/x-www-form-urlencoded'},
// transformRequest: [function (data) {
// // 对 data 进行任意转换处理
// return Qs.stringify(data)
// }],
data: postData,
}).then((response)=>{
})
}
}
}
网友评论