axios异步提交表单数据的不同形式

踩坑Axios提交form表单几种格式

前后端分离的开发前后端, 前端使用的vue,后端的安全模块使用的SpringSecurity,使用postman测试后端的权限接口时发现都正常,但是使用vue+axios发送异步的请求后端一直获取不出axios提交的form表单的数据,爬坑两个半钟头找到了答案

axios用post异步形式提交的数据和我们直接使用from表单提交的数据的格式(Form Data格式)是不一样的,在下面列举

默认格式Request Payload

直接使用axios发送异步请求,没任何处理的代码如下:


const service = axios.create({})

doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: pojo
    })

这种方式提交的表单格式是默认是RequestPayload, 它的长下面这个样子

1496926-20190810234419687-288094.png

可以看到,它的Contet-type是 "Content-Type": "application/json;"
但是后台的SpringSecurity对这种结果可不买单,在Request中解析不出任何数据来

处理成Form Data格式

使用插件qs, 安装命令如下:

npm install --save qs

请求编码:


const service = axios.create({})

  doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
       data: qs.stringify(pojo)
    })
  }
  
  或者
  
  doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: pojo ,
       transformRequest: [function (data) {
        data = qs.stringify(data);
        return data;
      }],
    })
  }

经过这样处理的表单数据长成下面的这样, 这也是我们最常用的Form Data格式,这种格式的数据可以从后台的HttpRequest中把提交的属性解析出来

1496926-20190810234413372-1079415829.png


其他类型的Content-Type对应的表单数据格式
const service = axios.create({
  headers: {
      "Content-Type": "multipart/form-data;  charset=utf-8;"
      }
})

 doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: qs.stringify(pojo)
       })
  }

它长这样
1496926-20190810234405924-2131977830.png



const service = axios.create({
  headers: {
      "Content-Type": "multipart/form-data;  charset=utf-8;"
      }
})

 doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: pojo
       })
  }
---

1496926-20190810235120845-407979088.png

const service = axios.create({
  headers: {
      "Content-Type": "multipart/form-data;  charset=utf-8;"
      }
})

 doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data:pojo
       })
  }

1496926-20190810234603466-980004239.png


const service = axios.create({
  headers: {
      "Content-Type": "application/x-www-form-urlencoded; charset=utf-8;"
  }
})

  doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: qs.stringify(pojo)
    })
  }

1496926-20190810234610240-1761374950.png

转载于:https://www.cnblogs.com/ZhuChangwu/p/11333549.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值