为什么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好用

相关推荐
Csvn6 小时前
OpenSpec 详细使用教程
前端
之歆7 小时前
Day19_LESS 完全指南——从入门到工程实践
前端·css·less
云水一下8 小时前
HTML5 从入门到精通:实战收官——从零搭建完整静态网站,综合运用所有知识
前端·html5
不总是8 小时前
Windows 系统 Node.js 免安装版(zip)安装与配置教程(2026 最新)
前端·windows·node.js
冬奇Lab8 小时前
每日一个开源项目(第105篇):Twenty - 跳出 Salesforce 的圈套,定义现代开源 CRM
前端·后端·开源
zhangyao9403309 小时前
开发pc端时,表格的高度怎么设置才能铺满页面
前端·javascript·elementui
XinZong9 小时前
实测OpenClaw虾淘:全民工具AI时代,冷门非工具类的Skill还能出圈吗?
javascript
kjs--9 小时前
浏览器书签执行脚本
前端
烛衔溟9 小时前
TypeScript 类的类型 —— 作为类型使用
javascript·ubuntu·typescript
之歆9 小时前
Day16_JavaScript 轮播图与事件工程实战(下篇)
服务器·开发语言·前端·javascript·网络·性能优化