目录
我们可以使用 json-server 快速搭建本地 REST API
2. axios.post(url, data, config)
3. axios.put(url, data, config)
5. axios.patch(url, data, config)
在了解ajax和axios之前,我们先观察一下他们是什么英文的缩写
ajax 的名字为 asynchroanous JavaScript and XML
而axios的名称来源于英文单词“axis”与“I/O”的结合,并非直接缩写自某个特定短语。
先导知识
在本文我们简单的介绍一下ajax后着重讲解axios,在平时工作中因为ajax配置较为底层,代码相对冗长,所以我们使用更为现代化的axios
Axios是一个基于Promise的HTTP客户端库,专为浏览器和Node.js设计。其优势包括:
- 简洁的API设计,支持Promise链式调用。
- 自动转换JSON数据,拦截请求和响应。
- 提供取消请求、超时控制等高级功能。
到底什么是基于promise?请看一下博主的上一篇文章Javascript异步代码处理-优快云博客
我们在这里简单的介绍一下:Promise是JavaScript中用于处理异步操作的编程构造。它表示一个异步操作的最终完成(成功或失败)及其结果值。最重要的是理解异步操作。
还有一个重点需要了解的是HTTP请求,此知识在各大网站均可搜到浅谈HTTP中Get、Post、Put与Delete的区别_联想如何跳过联网-优快云博客,先确保自己了解清楚后再开始axios的学习。
在传统的网页开发中,每次我们点击一个链接或按钮跳转到另一个页面时,浏览器会重新加载整个页面。这个过程会出现短暂的白屏现象(页面内容完全空白),这是因为浏览器正在等待从服务器加载新的页面内容。
为了改善这种用户体验,开发者通常会尝试优化网络传输速度,比如压缩资源文件、使用缓存、开启CDN等方式来减少白屏时间。但无论我们怎么优化网络传输,总还会有一个过程是“清空页面 → 加载新页面”,这就不可避免地会出现白屏。
另外,传统的网页更新方式也存在一个效率问题:哪怕只需要更改页面上的一小部分内容,也必须整个页面重新加载。这不仅浪费资源,也让用户等待的时间变长。
在构建现代web项目的时候,前端与后端之间亲密的数据交互是重要的核心环节。而我们就是采用AJAX技术来实现这种数据交互的过程的。虽然浏览器本身已经提供了XMLHttpRequest和fetch()等等方式,但是他们或多或少存在复杂,兼容性不一等等的问题。
于是我们采用一个更强大,更友好,更灵活的AJAX封装库--Axios
在开始之前我们先了解如何引入axios在我们的项目中
如果你用的是前端构建工具(如 Vite、Webpack、Vue CLI):
npm install axios 或者 yarn add axios
CDN 引入(适合纯 HTML 页面):
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
引入后,请你记住,我们引入axios的目的就是来实现异步请求的,异步就是异步,请求有很多种。
同步
在了解异步之前我们先学习一下什么是同步,我们并不举一些生活的例子,直接使用代码方面的解释什么是同步:代码按顺序一行一行执行,每一行都必须等上一行执行完成后才能继续执行下一行。
console.log('1');
console.log('2');
console.log('3');
代码输出结果只能是123,而不会是其他情况
异步
现在我们考虑一下异步,在异步模式中,某些操作不会立即完成(比如网络请求、定时器等),它们会先挂起或排队等待执行,程序会继续执行后面的代码,而不是等待异步操作完成。
console.log('开始模拟请求');
setTimeout(()=>{
console.log('请求中')
},2000)
console.log('请求已经发送');
考虑这段代码,按照我们初学者所想,输出结果就应该是 开始模拟请求->请求中->请求已经发送
但下面控制台输出结果并非如此。
关键就在于:setTimeout 是异步的。
-
当 JavaScript 执行到
setTimeout时,它不会等里面的代码执行完再往下走。 -
它会将回调函数(
console.log('请求中'))注册到“任务队列”中,然后继续执行后面的代码。 -
等到 定时器时间到了(这里是2秒),并且主线程空闲时,那个回调才会执行。

到这里我们已经理解了异步的核心思想
异步就是:你启动了一件任务,但不会等它完成才做下一件事。它不会“阻塞”后续代码的执行,而是“等你有空再处理这件事”。
Axios
上文讲到引入axios是完成异步请求的,我们异步已经搞明白了,现在我们来仔细分析一下请求
我们使用axios请求,其实是浏览器在背后通过HTTP协议向服务器发送请求并等待响应
包括以下两个核心部分:
请求(Request): 你告诉服务器我要什么
响应(Response):服务器告诉你这是你要的内容
常见的请求类型(也叫“方法”)有这些:
| 方法 | 用途 | 示例 |
|---|---|---|
GET | 获取数据 | 获取文章、用户信息等 |
POST | 发送数据(新增) | 提交表单、注册用户等 |
PUT | 更新数据 | 修改用户资料等 |
PATCH | 部分更新数据 | 修改一个字段 |
DELETE | 删除数据 | 删除评论、记录等 |
我们现在用一个简单的文章小系统来了解Axios的基础用法(请注意我们不会把代码一股脑全考上来,也不会实打实就写代码,而是通过这个项目的流程来熟悉一下axios而已)
我们要构建一个简单的“文章管理系统”,包含以下功能:
-
获取文章列表
-
发布新文章
-
修改已有文章
-
删除文章
这些功能刚好对应 Axios 中最常用的四种请求方法:GET、POST、PUT、DELETE。
先说白了,get从哪里get,又post到哪里
-
get是从 服务器的某个接口(URL) 请求数据 -
post是把数据 发送到服务器的某个接口(URL)
而这个时候API接口文档就显得十分重要了
Restful API 接口规范详解-腾讯云开发者社区-腾讯云
我们可以使用 json-server 快速搭建本地 REST API
1. 安装 json-server
npm install -g json-server
2. 创建模拟数据 db.json
在你的项目根目录创建一个文件:db.json
3. 启动服务
json-server --watch db.json --port 3000
它会自动创建出一组 完整的 RESTful 接口:
| 功能 | 请求方法 | 地址 |
|---|---|---|
| 获取所有文章 | GET | http://localhost:3000/posts |
| 获取指定文章 | GET | http://localhost:3000/posts/1 |
| 添加文章 | POST | http://localhost:3000/posts |
| 修改文章 | PUT | http://localhost:3000/posts/1 |
| 删除文章 | DELETE | http://localhost:3000/posts/1 |
4、Mock 语法
db.json 的语法就是 标准的 JSON,关键在于结构的设计。记住:Key 是路径,数组里放对象,对象属性就是字段。
我们可以查看一下这篇博客快速学习https://juejin.cn/post/7464125372055126068
- JSON 文件模拟:
- JavaScript 对象模拟:
- 第三方库模拟:
-
新建一个文件,命名为
db.json。 -
按照上面的规则和例子,用
{}定义顶级对象。 -
在里面写你的资源名(如
"books"),值写[]。 -
在
[]里,写多个{},每个{}代表一条数据。 -
在每个
{}里,用"字段名": 值的格式定义数据。 -
保存文件。
-
命令行运行:
json-server --watch db.json --port 3000(端口可选)。 -
打开浏览器访问
http://localhost:3000/你的资源名(如http://localhost:3000/books),就能看到 Mock 的数据了!
4. 示例代码:使用 Axios 测试
axios.get('http://localhost:3000/posts')
// 获取文章
axios.post(
'http://localhost:3000/posts'
,
{ title: '测试文章', content: '这是一个模拟添加的文章' }
);
Axios基本语法学习/复习
了解基本语法之前我们需要学习headers、params,也就是请求头和请求体的内容
语法形式(通用)
axios(config)
axios({
method: 'get', // 请求方法(get/post/put/delete)
url: '/api/posts', // 请求地址
params: { id: 1 }, // URL 查询参数(自动拼接成 ?id=1)
data: { title: '标题' }, // 请求体数据(POST/PUT 用)
headers: { 'X-Custom': 'value' }, // 自定义请求头
timeout: 5000 // 超时设置(单位毫秒)
})
各方法语法和参数
1. axios.get(url, config)
-
url:请求地址
-
config:配置对象(headers、params 等)
axios.get('/api/posts');
2. axios.post(url, data, config)
-
url:请求地址
-
data:请求体(body)内容
-
config:附加配置
axios.post('/api/posts', {
title: '新文章',
content: '内容'
});
3. axios.put(url, data, config)
axios.put('/api/posts/1', {
title: '修改标题'
});
4. axios.delete(url, config)
axios.delete('/api/posts/1');
5. axios.patch(url, data, config)
用于局部更新资源
axios.patch('/api/posts/1', {
title: '只修改标题'
});
返回值:Axios 响应结构
Axios 所有请求都会返回一个 Promise,你可以用 .then() 处理返回值:
axios.get('/api/posts/1')
.then(response => {
console.log(response.data); // 服务器返回的数据
console.log(response.status); // 状态码,如 200
console.log(response.headers); // 响应头
console.log(response.config); // 请求配置信息
})
.catch(error => {
console.error(error.response); // 错误响应对象
});
Axios 特性汇总
| 特性 | 说明 |
|---|---|
| 基于 Promise | 支持链式调用、async/await 使用 |
| 自动 JSON 转换 | 自动将请求数据转为 JSON,也自动解析响应 JSON |
| 默认 GET 请求 | 默认 method 是 get,除非你设置为 post 等 |
| 跨浏览器兼容性强 | 能在所有主流浏览器中使用 |
| 支持请求/响应拦截器 | 可在请求发出前或收到响应后处理逻辑 |
| 取消请求 | 支持 CancelToken 取消请求 |
| 防止 XSRF 攻击 | 自动从 Cookie 获取 token 设置到请求头 |
| 统一配置 | 可通过 axios.create() 创建实例统一配置 |
vue的生命周期
很奇怪为什么在讲解axios的时候写上了vue的生命周期,其实了解了vue的生命周期对我们结合axios编写代码案例有很大的帮助
Vue 生命周期指的是组件从创建到销毁的过程,每个阶段都有对应的钩子函数(可执行代码)。
创建 -> 挂载 -> 更新 -> 销毁
在 Vue 项目中,Axios 是我们连接前端和后端的“数据快递员”。而要让快递准时送达、准确落地,就必须选对“投递时机”——这就是 Vue 生命周期的意义所在。
Vue 的组件就像一个人,从出生到工作、退休,有一整套流程。不同阶段能干的事不一样,而 Axios 发请求,也讲究“时机对、事半功倍”。
1.created:刚出生,正在准备“上场”
当组件执行到 created 阶段时,Vue 已经把 data() 和 methods 准备好了,数据能用,页面还没挂上。
这就像一个演员在后台化好妆、背好台词,还没走上舞台——这个时候你就可以请“快递员”(Axios)把“剧本”提前送过来。
用在什么场景?
-
获取用户信息
-
加载初始的商品列表、文章、评论数据
-
不需要用到 DOM 的场景
created() {
this.$axios.get('/api/user/info')
.then(res => {
this.userInfo = res.data;
});
}
提前拿到用户数据,等页面出来的时候就能一次性全部显示出来,流畅!
mounted:舞台灯亮了,演员登场!
mounted 是页面真正挂载到 DOM 上的时刻——你可以看见页面、操作 DOM 元素,这才是“正式演出”的开始。
用在什么场景?
-
页面尺寸、元素大小等 DOM 信息相关的数据请求
-
用户操作完某些元素后再加载的数据
-
验证码渲染、Canvas、图表初始化等要“看得见”的东西
项目里真实用法
mounted() {
this.randomCode(); // 页面渲染后生成验证码
}
什么时候该用哪个?
| 需求场景 | 推荐使用生命周期 |
|---|---|
| 页面一开始就需要的数据 | created |
| 要等页面元素挂载后再处理 | mounted |
| 完全不依赖页面结构的请求 | created |
| 要用 DOM 宽高、位置等信息 | mounted |
| 生命周期阶段 | 中文解释 | 你能做什么 | 举个例子(结合项目) |
|---|---|---|---|
| beforeCreate | 数据还没初始化,什么都没有 | 几乎不怎么用 | 不能访问 data() 里面的内容 |
| created | 数据创建好了,但页面还没出来 | 可以提前处理数据、发请求 | 登录页面一开始就获取历史记录(比如自动填入用户名) |
| beforeMount | 页面准备挂载,但内容还没显示 | 准备工作 | 用得少 |
| mounted | 页面已经显示在浏览器上了 | 最常用,访问页面元素、初始化 | 你用来生成验证码的 randomCode() 就写在这 |
| beforeUpdate | 页面要更新了(比如输入框刚变) | 还没真正变化时做准备 | 记录旧密码、阻止某些自动更新 |
| updated | 页面更新完了 | 看页面改了什么,或再处理 | 输入验证码后,页面改了,你可以重新聚焦输入框 |
| beforeDestroy | 页面要被关闭、销毁了 | 清理资源、停止定时器 | 比如用户离开页面了,要取消轮询任务 |
| destroyed | 页面组件彻底没了 | 最后清理,没什么可做了 | 很少用,但可以做最终日志 |

263

被折叠的 条评论
为什么被折叠?



