为什么axios会有params和data两个参数

不知道大家有没有过这种感觉,突然一个问题百思不得其解,然后突然有一天就明白了。然后就感觉这个问题原来这么简单,本来想记录下来,但是又感觉这么简单的问题记录下来没啥意义。但是回过头来想一想,这个问题之前其实困扰了你很长时间。感觉还是记录一下比较好,万一哪一天突然对这个问题有了新的扩展呢?

先来回顾一下axios的基本使用,怎么发送一个请求:

发送get请求

javascript 复制代码
// 发送的链接就是 https://www.baidu.com?a=1
axios.get('https://www.baidu.com', { params: { a: 1 } })

// 或者这样
axios({
  method: "get",
  url: 'https://www.baidu.com',
  params: { a: 1 }
})

// 如果发送一个带请求头的就是这样
axios.get('https://www.baidu.com', { params: { a: 1 }, headers: { token: "123" } })

// 或者这样
axios({
  method: "get",
  url: 'https://www.baidu.com',
  params: { a: 1 },
  headers: { token: "111" }
})

发送post请求

javascript 复制代码
axios.post('https://www.baidu.com', { a: 1 })

// 或者这样
axios({
  method: "post",
  url: 'https://www.baidu.com',
  data: { a: 1 }
})

// 如果发送一个带请求头的就是这样
axios.post('https://www.baidu.com', { a: 1 }, { headers: { token: "123" } })

// 或者这样
axios({
  method: "post",
  url: 'https://www.baidu.com',
  data: { a: 1 },
  headers: { token: "111" }
})

这里我们可以发现

axios.get可以传递两个参数 url其他参数
axios.post可以传递三个参数 url请求发出去的参数其他参数

好像不方便记忆,一会传2个,一会传3个的。所以一般情况下,即使是对项目封装网络请求,我也会使用axios()去封装,而不是使用axios.getaxios.post

那么使用axios(),get请求时如果给请求传一些参数,那么可以使用params,例如:

javascript 复制代码
axios({
  method: "get",
  url: 'https://www.baidu.com',
  params: { a: 1 }
})

而使用post的时候需要使用data,例如:

javascript 复制代码
axios({
  method: "post",
  url: 'https://www.baidu.com',
  data: { a: 1 }
})

好奇挂啊,为什么不能使用同一个参数呢?其实paramsdata有各自的使用意义。

params是拼接在url后面的参数
data是请求体里面的参数

例如发送post的时候

javascript 复制代码
axios({
  method: "post",
  url: 'https://www.baidu.com',
  data: { a: 1 },
  params: { a: 2 }
})

上面例子a=1会放在url后面拼接,而a=2会在请求体中。所以paramsdata其实是各司其职的。

那么再来看一下,如果像使用axios.post,我既想在url后面拼接参数,又想在请求体里面有参数,该怎么写呢?

javascript 复制代码
axios.post('https://www.baidu.com', { a: 1 }, { params: { a: 1 }, headers: { token: "123" } })

所以还是感觉直接调用axios好用

相关推荐
jiangzhihao05153 分钟前
升级到webpack5
前端·javascript·vue.js
哆啦A梦15887 分钟前
36 注册
前端·javascript·html
华仔啊9 分钟前
面试官:说说async/await?我差点翻车!原来还可以这么用
前端
菥菥爱嘻嘻21 分钟前
输出---修改ant样式
前端·react.js·anti-design-vue
WujieLi24 分钟前
初识 Vite+:一文了解 Rust 驱动的新一代前端工具链
javascript·rust·vite
可触的未来,发芽的智生25 分钟前
新奇特:神经网络速比器,小镇债务清零的算法奇缘
javascript·人工智能·python
该用户已不存在1 小时前
这6个网站一旦知道就离不开了
前端·后端·github
Ai行者心易1 小时前
10天!前端用coze,后端用Trae IDE+Claude Code从0开始构建到平台上线
前端·后端
东东2331 小时前
前端开发中如何取消Promise操作
前端·javascript·promise
掘金安东尼1 小时前
官方:什么是 Vite+?
前端·javascript·vue.js