需求:要发送一个post请求,需要传给后台的参数如图:
如果我用jquery的post来实现,如图:
查看network如下:
如果使用axios来请求:
查看network如下:
都是form Data,为什么不一样呢?用axios请求就不成功,$.post就可以。我看了axios的文档,需要使用transformRequest来处理一下传入参数。但是为什么$.post就不用呢?我查了一下别人的解释,说是什么请求体什么的,不是很懂!谁能给解析一下背后的原理?
需求:要发送一个post请求,需要传给后台的参数如图:
如果我用jquery的post来实现,如图:
查看network如下:
如果使用axios来请求:
查看network如下:
都是form Data,为什么不一样呢?用axios请求就不成功,$.post就可以。我看了axios的文档,需要使用transformRequest来处理一下传入参数。但是为什么$.post就不用呢?我查了一下别人的解释,说是什么请求体什么的,不是很懂!谁能给解析一下背后的原理?
不使用transformRequest的话,有如下几种方式
//方式1
var params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params);
//方式2
var qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 }));
//方式3
axios.post(url,
querystring.stringify(params), {
headers: {
'Content-type': 'application/x-www-form-urlencoded'
}
})
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.3k 阅读✓ 已解决
因为jquery的诞生就是搞兼容的,他不但解决了浏览器兼容,还将一些格式做了兼容。比如你这里想用axios的post,使用x-www-form-urlencoded形式,jquery在接收这个格式的时候,对其做了处理,实现你得知道form-rtlencoded与json的请求形式的区别:
x-www-form-urlencoded:a=b&c=d;
json:{"a":"b","c":"d"}
也许你已经看懂了,axios之所以报错,是因为请求格式与请求数据格式不匹配,axios不会自己转换请求数据格式,怎么办?自己转换呗