关于post请求传参问题请教?

需求:要发送一个post请求,需要传给后台的参数如图:
图片描述

如果我用jquery的post来实现,如图:
图片描述

查看network如下:
图片描述

如果使用axios来请求:
图片描述

查看network如下:
图片描述

都是form Data,为什么不一样呢?用axios请求就不成功,$.post就可以。我看了axios的文档,需要使用transformRequest来处理一下传入参数。但是为什么$.post就不用呢?我查了一下别人的解释,说是什么请求体什么的,不是很懂!谁能给解析一下背后的原理?

阅读 2.5k
3 个回答

因为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不会自己转换请求数据格式,怎么办?自己转换呗

不使用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'
      }
    })

axios要多加一个参数transformRequest通过这个东西来过滤。具体为什么网上说法就很多了。你可以自己查一下

传送门1
传送门2

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题