使用axios的post请求 请求参数好像有问题啊

2017-09-29 01:01:54axios问题

使用axios的post请求参数如下:
image.png

使用jq的ajax请求参数如下
image.png

axios的请求参数,后台无法request前端post的参数。
axios的代码如下:

axios.post('/', {
    email: 'a@qq.com',
}).then(function(data) {
});

热门评论:

  • Carson Carson 2017-9-29 1:00 回复:

    请详详细po出你前后端的代码或sample代码。截图和其他描述可以在后面作为补充描述与问题,axios库本身不可能有问题。

网友回答:

  • royal_029 royal_029 2017-9-29 1:29 回复:
    已被采纳

出现这种情况是因为服务器要求POST请求模式下需传Content-Type:application/x-www-form-urlencoded格式的数据,axios可以配合qs库格式化数据。

    import axios from 'axios';
    import qs from 'qs';
let postData = qs.stringify({email: 'a@qq.com'})
axios.post(url,postData)</code></pre>

如果服务器接受JSON格式的数据,不引用qs库直接传默认的application/json也可以。

  • jsoncode jsoncode 2017-9-29 2:09 回复:royal_029
    qs模块没有browser版本的吗?网上没找到下载的地方,github也没找到啊

  • 穗乃果 穗乃果 2017-9-29 2:36 回复:royal_029

    http://www.bootcdn.cn/qs/

  • jsoncode jsoncode 2017-9-29 2:41 回复:royal_029
    嗯,多谢多谢,我用npm install qs,然后拷贝过来了,哈哈。我没有用webpack打包,是browser模式开发的。

  • Azath0th Azath0th 2018-4-14 9:37 回复:royal_029

    终于找到解决方式……泪流满面,特意登陆上来感谢


  • 穗乃果 穗乃果 2017-9-29 1:21 回复:

    楼上答非所闻。
    很明显axios在帮你post JSON字符串,然而你期望的肯定是application/x-www-form-urlencoded,因为jQuery.ajax默认就是这种格式。具体怎么做需要用qs.stringify,网上教程很多。
    http://www.jianshu.com/p/b22d...

    • toBeTheLight toBeTheLight 2017-9-29 1:33 回复:穗乃果

      呵呵。Query String Parameters指的就是通过在URL中携带的方式提交的参数。

    • 穗乃果 穗乃果 2017-9-29 2:13 回复:穗乃果

      别没事就呵呵。。。
      @royal_029 的答案可不是在url上拼参数,它的效果和$.ajax的post默认方式是一样的。

    • jsoncode jsoncode 2017-9-29 2:22 回复:穗乃果
      对,你说的是我想要的意思

    • toBeTheLight toBeTheLight 2017-9-29 2:51 回复:穗乃果

      你能拿post不拼串发一个query string parameters的请求?
      我说错了是axios转query params这个我确实搞错了。
      query string parameters只有在地址传参的时候才可能出现这种数据解析格式。


  • toBeTheLight toBeTheLight 2017-9-29 1:06 回复:

    Query String Parameters说明参数是拼到了url地址上传过去的。
    原有的jquery的ajax如果用的是post,说明本身设计就有问题。
    你看axios.post有没有参数可以帮你拼上去,或者你手动拼。


Query String Parameters指的就是通过在URL中携带的方式提交的参数。
跟content-type没有什么关系。
@royal_029 的答案应该是axiosquery params序列化的正确方式。


  • 陶留军 陶留军 2017-10-16 10:20 回复:

    跟Content-Type是没有关系的,qs的方式可取,但要多安装一个模块,参照下面链接,只需要添加3行代码即可。axios的post最好再封装一下

https://taoliujun.github.io/2...


  • zouyaowen zouyaowen 2019-3-30 11:25 回复:

    application/x-www-form-urlencoded使用以下两种方式可以亲测可以

            const params = new URLSearchParams();
            params.append('name', 'abcdef');
            params.append('age', 8899);
            axios.post('http://127.0.0.1/study/cross/getData',
                params
            ).then(function (response) {
                console.log(response);
            }).catch(function (error) {
                console.log(error);
            });
            let postData = qs.stringify({name: 'qsName',"age":22})
            axios.post('http://127.0.0.1/study/cross/getData',
                postData
            ).then(function (response) {
                console.log(response);
            }).catch(function (error) {
                console.log(error);
            });
            以上需要引入
            import axios from 'axios';
            import qs from 'qs';