为什么jquery和axios用法类似,但是请求时传参类型却不同?
jquery默认 form Data(如:url?a=1形式);
因为jquery在执行post请求时,会默认设置Content-Type为application/x-www-form-urlencoded,发送的参数为form Data形式,所以服务器能够正确解析;
而使用原生ajax、axios请求时,如果不显示的设置Content-Type,axios默认发送数据时,数据格式是application/json,控制台参数里显示Request Payload(即 json格式),而并非我们常用的Form Data格式。
既然我们知道axios post方法默认使用application/json格式编码数据,那么解决方案就有两种,一是后台改变接收参数的方法,另一种则是将axios post方法的编码格式修改为application/x-www-form-urlencoded,这样就不需要后台做什么修改了。
---------------------
改变接收参数的解决办法:
1)URLSearchParams
var params = new URLSearchParams(); params.append('key1', 'value1'); //你要传给后台的参数值 key/value params.append('key2', 'value2'); params.append('key3', 'value3');
querystring
module as follows:
const axiosInstance = axios.create({
// axios实例配置
timeout: 15000,
method:
'post'
,
headers: {
'Content-Type'
:
'application/x-www-form-urlencoded'
},
transformRequest: [
function
(data) {
// 请求前参数序列化
return
qs.stringify(data);
}]
});
params用于get请求,是添加到url的请求字符串中的,即
是发送请求的查询参数对象,对象中的数据会被拼接成
url?param1=value1¶m2=value2
。。
而data是添加到请求体(body)中的, 用于post请求。
参考:
https://github.com/axios/axios/blob/master/README.md#using-applicationx-www-form-urlencoded-format