视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
axios异步提交表单数据的几种方法
2020-11-27 21:52:34 责编:小采
文档


踩坑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, 它的长下面这个样子

可以看到,它的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中把提交的属性解析出来

其他类型的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)
 })
 }

它长这样

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
 })
 }
---

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
 })
 }

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)
 })
 }

总结

下载本文
显示全文
专题