前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue项目中,关于Axios使用的总结

Vue项目中,关于Axios使用的总结

作者头像
用户9914333
发布2022-07-22 14:29:02
5620
发布2022-07-22 14:29:02
举报
文章被收录于专栏:bug收集

Vue项目中,遇到了很多关于 axios 传参的问题。

今天做了一个总结 ,一共6点. 请向下文

1、POST 传参收不到数据

需要对参数进行转换,转换成字符串格式

推荐使用qs模块

步骤1:npm install qs --save-dev // 安装qs模块 步骤2:import qs from 'qs' 步骤3:使用qs

代码如下:

代码语言:javascript
复制
let postData=qs.stringify({
          size:6,
          current:1
        })
this.$axios.post('/api/studentlist.do',postData).then().catch()

2、修改请求头(request header)

有时,需要将请求头设置为: Content-Type: 'application/json'

代码语言:javascript
复制
this.$axios.post('/api/user/login',
  JSON.stringify({
    jobNumber: 'GL001',
    password: '123'
  }),
  {
    headers: {
      'Content-Type': 'application/json',
      auth: '123'
    }
  }).then((res) => {
  console.log(res)
})

3、如何传formData数据

如果有文件,请使用FormData的形式传递数据 , 且设置: Content-Type: 'multipart/form-data'

代码语言:javascript
复制
//    1、首先定义一个formData对象
    var fd = new FormData()
    //    2、将需要传的参数append到formData对象中
    fd.append('startTime', '2020-01')
    fd.append('endTime', '2020-06')
    //    3、向后台直接传定义的formData对象fd
    this.$axios.post('/api/all/order/money', fd,
    {
      headers: {
        //     4、如有文件,请将请求头改为multipart/form-data
        'Content-Type': 'multipart/form-data'
      }
    }).then((response) => {
      console.log(response.data.data)
      }
    })

4、POST传参有两种 Params 与Data 两种形式

params是添加到url的请求字符串中的,一般用于get请求。

data是添加到请求体(body)中的, 一般用于post请求。

上面,只是一般情况. 其实,post请求也可以使用params方式传值 , 但是get请求没有data方式

第一种:data 传参

代码语言:javascript
复制
this.$axios({
   url: '/api/user/login' ,
   method: 'post',
   headers: {
      'Content-Type': 'application/json'
   },
   data:{
      username: this.user,
      pwd: this.pwd
   }
}).then((res) => {
  console.log(res)
})

下面的方式,也属于 data 方式传参

代码语言:javascript
复制
  this.$axios.post('/api/all/order/list', qs.stringify({
          currentPage:1,
          pageSize:10
      })
  });

第二种:params传参

代码语言:javascript
复制
this.$axios({
   url: '/api/user/login' ,
   method: 'post',
   headers: {
      'Content-Type': 'application/json'
   },
   params:{
      username: this.user,
      pwd: this.pwd
   }
}).then((res) => {
  console.log(res)
})

注:可以同时使用两种方式传参

5、如果只传一个值,不要键只要值

不写成对象,直接写值就好。

代码语言:javascript
复制
this.$axios.post('/api/chuli/deleteByIds',this.ids,
  {
    headers: {
      'Content-Type': 'application/json'
    }
  }).then((res) => {
  console.log(res)
})

6、传递数组

情况一:简单数组

方案:使用qs.stringify() 方法,进行转换,根据你想到的形式,设置arrayFormat的值 .

代码语言:javascript
复制
1、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' })
// 输出结果:'a[0]=b&a[1]=c'
2、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' })
// 输出结果:'a[]=b&a[]=c'
3、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' })
// 输出结果:'a=b&a=c'
4、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'comma' })
// 输出结果:'a=b,c'

问题二:数组中存储的是对象

数组中的元素是对象,传递过去的JSON格式如下:

代码语言:javascript
复制
{
a: 1,
b[0][c]: 1
b[0][d]: 2
}

这种格式后端接口是不能解析的。因为后端需要如下格式:

代码语言:javascript
复制
{
a: 1,
b[0].c: 1
b[0].d: 2
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bug收集 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档