HTTP请求中,如果是get请求,那么表单参数以name=value&name1=value1的形式附到url的后面,如果是post请求,那么表单参数是在请求体中,也是以name=value&name1=value1的形式在请求体中。(Content-Type为application/x-www-form-urlencoded)
但是使用axios post请求的时候,如果不显式的设置Content-Type,则默认为text/plain,这时服务器就不知道怎么解析数据了。
所以需要设置Content-Type。
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
可是光这样还不行,我们还需要对传递的参数data做处理,处理成name=value&name1=value1的形式,可以借助qs。
先引入qs,然后调用qs的stringify方法。
import axios from 'axios';
import qs from 'qs';
Vue.prototype.$qs = qs;
let postData = this.$qs.stringify({
key1:value1,
key2:value2,
key3:value3,
});
如果参数中含有数组,可以给qs.stringify第二个参数处理数组格式:
qs.stringify({ids: [1, 2, 3]}, { indices: false })
//形式: ids=1&ids=2&id=3
qs.stringify({ids: [1, 2, 3]}, {arrayFormat: ‘indices‘})
//形式: ids[0]=1&aids1]=2&ids[2]=3
qs.stringify({ids: [1, 2, 3]}, {arrayFormat: ‘brackets‘})
//形式:ids[]=1&ids[]=2&ids[]=3
qs.stringify({ids: [1, 2, 3]}, {arrayFormat: ‘repeat‘})
//形式: ids=1&ids=2&id=3
网友评论