「Vue3系列」Vue3 Axios详解

文章目录

  • 一、Vue3 Axios
  • 二、Vue3 Axios 请求配置项
  • 三、Axios 响应结构
  • 四、Axios 拦截器
    • 请求拦截器
    • 响应拦截器
    • 拦截器的移除
    • 拦截器的应用场景
  • 五、相关链接

一、Vue3 Axios

在 Vue 3 中,你可以使用 axios 来执行 AJAX 请求。axios 是一个流行的基于 Promise 的 HTTP 客户端,它可以在浏览器和 node.js 中使用。它提供了一种简单的方法来发送 GET 和 POST 请求,并处理响应。

首先,你需要在你的 Vue 3 项目中安装 axios。你可以使用 npm 或 yarn 来安装它:

npm install axios
# 或者
yarn add axios

一旦你安装了 axios,你就可以在你的 Vue 组件中使用它来发送 AJAX 请求。下面是一个简单的例子,展示了如何在 Vue 3 组件中使用 axios 来发送一个 GET 请求:

<template><div><h1>User Information</h1><p>Name: {{ user.name }}</p><p>Email: {{ user.email }}</p></div>
</template><script>
import { ref, onMounted } from 'vue';
import axios from 'axios';export default {setup() {const user = ref(null);onMounted(async () => {try {const response = await axios.get('https://api.example.com/user');user.value = response.data;} catch (error) {console.error('An error occurred:', error);}});return {user};}
};
</script>

在这个例子中,我们使用了 Vue 3 的 setup 函数来初始化组件的状态和逻辑。我们创建了一个名为 user 的响应式引用,并在组件挂载后(onMounted 生命周期钩子)发送了一个 GET 请求到 https://api.example.com/user。请求成功后,我们将响应的数据赋值给 user.value,这样它就可以在模板中显示了。

如果你需要发送 POST 请求,你可以使用 axios.post 方法。下面是一个发送 POST 请求的例子:

import { ref, onMounted } from 'vue';
import axios from 'axios';export default {setup() {const formData = ref({name: '',email: ''});const submitForm = async () => {try {const response = await axios.post('https://api.example.com/submit', formData.value);console.log('Form submitted successfully:', response.data);} catch (error) {console.error('Failed to submit form:', error);}};onMounted(() => {// 可以在这里进行其他初始化操作});return {formData,submitForm};}
};

在这个例子中,我们定义了一个 formData 引用,用于存储表单数据。我们还定义了一个 submitForm 方法,它使用 axios.post 发送一个 POST 请求到 https://api.example.com/submit,并传递 formData.value 作为请求体。

二、Vue3 Axios 请求配置项

Axios 请求的配置项非常丰富,以下是一些常用的配置项及其说明:

  1. url:请求的服务器 URL,是必需的。
  2. method:创建请求时使用的 HTTP 方法,如 ‘GET’、‘POST’ 等。如果没有指定,请求将默认使用 ‘GET’ 方法。
  3. baseURL:在发送请求时,会自动添加到 url 前面的基础 URL。除非 url 是一个绝对 URL,否则 baseURL 会被使用。
  4. headers:自定义请求头的内容,例如:
headers: {'Content-Type': 'application/json','Authorization': 'Bearer your-token'
}
  1. params:URL 的查询参数,以对象形式提供,会被序列化成查询字符串添加到 URL 后面。
params: {ID: 12345
}
// 请求 URL 会是 http://example.com/items?ID=12345
  1. paramsSerializer:一个函数,用于序列化 params 对象到 URL 查询字符串。
  2. data:作为请求体被发送的数据,通常用于 ‘POST’ 或 ‘PUT’ 请求。
  3. timeout:请求超时的毫秒数。超过这个时间,请求将被拒绝。
  4. responseType:服务器响应的数据类型,例如 ‘arraybuffer’、‘blob’、‘document’、‘json’、‘text’、‘stream’ 等。
  5. withCredentials:表示跨站点访问控制(CORS)请求是否应该携带凭证信息(如 cookies 或 HTTP 认证)。
  6. transformRequest:在发送请求之前,修改请求数据的函数或函数数组。
  7. transformResponse:在传递给 thencatch 之前,修改响应数据的函数或函数数组。
  8. validateStatus:定义对于给定的 HTTP 响应状态码是 resolve 或 reject promise 的函数。
  9. maxContentLength:定义允许的响应内容的最大长度。
  10. maxRedirects:定义在 node.js 中跟随的最大重定向次数。

以上配置项可以在 Axios 的请求方法(如 axios.get(), axios.post() 等)中作为第二个参数传递,也可以在创建 Axios 实例时通过配置对象来设置默认值。

例如,创建一个带有默认配置的 Axios 实例:

const axiosInstance = axios.create({baseURL: 'https://api.example.com',timeout: 1000,headers: {'X-Custom-Header': 'foobar'}
});// 使用该实例发送请求
axiosInstance.get('/users').then(response => {// 处理响应}).catch(error => {// 处理错误});

在这个例子中,axiosInstance 会使用指定的 baseURLtimeoutheaders 作为默认值。之后发送的请求只需要提供剩余的特定配置或数据即可。

三、Axios 响应结构

Axios 的响应结构主要包含以下信息:

  1. config:这是 Axios 请求的配置信息,包括请求类型、请求的 URL、请求体等。

  2. data:这是响应体的结果,也就是服务器返回的数据。Axios 会对服务器返回的结果进行 JSON 解析,将其转换成一个对象,方便开发者对结果进行处理。

  3. headers:这是响应的头信息,所有的 header 名称都是小写,可以使用方括号语法访问,例如 response.headers['content-type']

  4. request:这是生成此响应的请求,也就是 Axios 在发送请求时所创建的原生的 AJAX 请求对象。在 Node.js 中,它是最后一个 ClientRequest 实例(inredirects),在浏览器中则是 XMLHttpRequest 实例。

  5. status:这是响应的 HTTP 状态码,表示请求的结果状态。

  6. statusText:这是响应的 HTTP 状态信息,是一个字符串,描述了状态码的含义,如 ‘OK’、‘Not Found’ 等。

这些信息都可以通过 Axios 的 .then() 方法中的回调函数获取,并对其进行处理。例如:

axios.get('https://api.example.com/data').then(function (response) {// 访问响应的数据console.log(response.data);// 访问响应的头部信息console.log(response.headers);// 访问响应的配置信息console.log(response.config);// 访问响应的状态码console.log(response.status);// 访问响应的状态信息console.log(response.statusText);// 访问生成此响应的请求对象console.log(response.request);}).catch(function (error) {// 处理错误console.log(error);});

在处理 Axios 响应时,开发者通常最关心的是 datastatus 字段,因为它们分别包含了服务器返回的数据和请求的结果状态。

四、Axios 拦截器

Axios 拦截器是一种强大的机制,允许你在请求被发送到服务器之前或响应被客户端接收之前对其进行修改或处理。拦截器分为请求拦截器(Request Interceptors)和响应拦截器(Response Interceptors)。

请求拦截器

请求拦截器可以在请求发送到服务器之前进行一些操作,比如添加通用的请求头、修改请求参数、添加身份验证信息等。你可以使用 axios.interceptors.request.use 方法来创建一个请求拦截器。

axios.interceptors.request.use(function (config) {// 在发送请求之前做些什么// 例如,添加请求头、身份验证等config.headers.Authorization = 'Bearer ' + localStorage.getItem('token');return config;
}, function (error) {// 对请求错误做些什么return Promise.reject(error);
});

响应拦截器

响应拦截器可以在响应到达客户端之前对其进行处理,比如统一处理错误、转换响应数据格式等。你可以使用 axios.interceptors.response.use 方法来创建一个响应拦截器。

axios.interceptors.response.use(function (response) {// 对响应数据做点什么// 例如,统一处理错误,转换数据格式等return response.data;
}, function (error) {// 对响应错误做点什么// 例如,统一处理网络错误等return Promise.reject(error);
});

拦截器的移除

如果你需要移除某个拦截器,可以使用 axios.interceptors.request.ejectaxios.interceptors.response.eject 方法,传入你希望移除的拦截器的函数作为参数。

const interceptor = axios.interceptors.request.use(function () {/*...*/});// 稍后
axios.interceptors.request.eject(interceptor);

拦截器的应用场景

  1. 请求前处理:在请求发送到服务器之前,你可以使用请求拦截器来添加通用的请求头(如认证信息、用户代理等),或者根据某些条件修改请求参数。
  2. 错误处理:你可以使用响应拦截器来统一处理服务器返回的错误,例如,当服务器返回 401 状态码时,你可以自动跳转到登录页面。
  3. 数据转换:响应拦截器允许你在数据到达客户端之前对其进行转换,例如,将 JSON 数据转换为 JavaScript 对象,或者将日期字符串转换为日期对象。

通过使用拦截器,你可以更加灵活地控制 Axios 的请求和响应处理流程,提高代码的可维护性和可扩展性。

五、相关链接

  1. Vue3官方地址
  2. Vue3中文文档
  3. 「Vue3系列」Vue3简介及安装
  4. 「Vue3系列」Vue3起步/创建项目
  5. 「Vue3系列」Vue3指令
  6. 「Vue3系列」Vue3 模板语法
  7. 「Vue3系列」Vue3 条件语句/循环语句
  8. 「Vue3系列」Vue3 组件
  9. 「Vue3系列」Vue3 计算属性(computed)、监听属性(watch)
  10. 「Vue3系列」Vue3 样式绑定
  11. 「Vue3系列」Vue3 事件处理
  12. 「vue3系列」Vue3 表单

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/725875.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面向对象详解以及示例解析

Java面向对象详解 文章目录 Java面向对象详解 面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;是一种计算机编程模型。其核心在于围绕数据或对象来组织软件设计&#xff0c;而非仅仅依赖于功能和逻辑。这种编程方式更专注于对象与对象之间…

设计模式之依赖倒转原则

目录 1、 基本介绍 2、 应用实例 3、 依赖关系传递的三种方式 (1) 接口传递 (2) 构造方法传递 (3) setter方式传递 4、 注意事项和细节 1、 基本介绍 依赖倒转原则(Dependence Inversion Principle)是指&#xff1a; 高层模块不应该依赖低层模块&#xff0c;二者都应该依…

文字悬浮下划线动态效果

概览 此篇文章主要介绍文字悬浮下划线的动画效果&#xff0c;主要有从左往右和从中间至两边扩散两种动态效果 一. 从左往右 示例代码如下 <!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"viewport" content…

【C语言】C语言编程进阶:异常处理与程序稳定性全攻略

1. 概述 异常处理又称异常错误处理&#xff0c;它提供了处理程序运行时出现任何意外或异常情况的方法。异常处理通常是防止未知错误的发生所采取的处理措施&#xff0c;对于某一类型的错误&#xff0c;异常处理应该提供相应的处理方法。例如&#xff0c;在设计程序时&#xff…

AI智商排名:Claude-3首次突破100

用挪威门萨&#xff08;智商测试题&#xff09;中 35 个问题对chatGPT等人工智能进行了测试&#xff1a; ChatGPT 对ChatGPT进行了两次挪威门萨测试&#xff0c;在 35 个问题中&#xff0c;它平均答对了 13 个&#xff0c;智商估计为 85。 测试方法 每个人工智能都接受了两次…

<商务世界>《第5课 重组、托管是什么?》

1 托管 1.1 案例 2020年10月&#xff0c;国资委决定&#xff0c;由中国宝武钢铁集团有限公司对中国中钢集团有限公司进行托管&#xff0c;这就意味着中钢集团由一个副部级的央企管理了&#xff0c;虽然级别没有变动&#xff0c;但是他的好多决策都不用先汇报给国资委了&#…

MATLAB知识点:循环语句的经典练习题

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自​第4章&#xff1a;MATLAB程序流程控制 下面我们来看…

springmvc的使用方法及运行原理

Spring MVC 是 Spring 框架中用于开发 Web 应用程序的一部分&#xff0c;它基于 MVC&#xff08;Model-View-Controller&#xff09;设计模式&#xff0c;提供了一种灵活且强大的方式来构建 Web 应用。 运行原理&#xff1a; 客户端发送请求&#xff1a;浏览器向服务器发送 H…

贷齐乐错误的waf引起的SQL注入漏洞复现

君衍. 一、环境介绍1、第一道WAF2、第二道WAF 二、环境部署1、模拟源码2、连接数据库源码3、数据库创建4、测试 三、源码分析1、模拟WAF2、注入思路3、PHP下划线特性4、完成假设 四、联合查询注入1、测试回显字段2、爆出库名3、爆出表名4、爆出表下的列名4、爆出flag 一、环境介…

CleanMyMac X4.14.7永久免费Mac电脑清理和优化软件

CleanMyMac X 是一款功能强大的 Mac 清理和优化软件&#xff0c;适合以下几类人群使用&#xff1a; 需要定期清理和优化 Mac 的用户&#xff1a;随着时间的推移&#xff0c;Mac 设备上可能会积累大量的无用文件、缓存和垃圾&#xff0c;导致系统运行缓慢。CleanMyMac X 的智能扫…

【Java JVM】Class 文件

Java 的口号 “一次编写, 到处运行 (Write Once, Run Anywhere)” 的基础: JVM 和 所有平台都统一支持的程序存储格式 – 字节码 (Byte Code)。 只要在对应的平台安装对应的 JVM, 将我们编写的源码编译为 Class 文件, 就能达到了一次编写, 导出运行的目标, 中间的所有细节由不同…

形容passwd和shadow区别

/etc/passwd 存账户信息一般不存密码 /etc/shadow主要用来存密码 /etc/passwd默认是任意用户可读只有root用户可修改 /etc/shadow 默认只有root用户可读可写 /etc/passwd 包含系统用户和用户的主要信息 /etc/shadow 用于储存系统中用户的密码&#xff0c;又称为影子文件 /etc/g…

11.WEB渗透测试-Linux系统管理、安全加固(上)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;10.WEB渗透测试-Linux基础知识-Linux用户权限管理&#xff08;下&#xff09;-CSDN博客 进…

【论文笔记】Language Models are Few-Shot Learners

Language Models are Few-Shot Learners 本部分是 GPT-3 技术报告的第一部分&#xff1a;论文正文、部分附录。 后续还有第二部分&#xff1a;GPT-3 的广泛影响、剩下的附录。 以及第三部分&#xff08;自己感兴趣的&#xff09;&#xff1a;GPT-3 的数据集重叠性研究。 回顾…

部署运维 防火墙,进程 常用命令

防火墙: 1. 查看是否安装了firewalld sudo systemctl status firewalld 查看防火墙状态或者sudo systemctl is-active firewalld 查看防火墙是否是开启状态 2. 开放6379port sudo firewall-cmd --add-port6379/tcp --permanent 刷新防火墙 sudo firewall-cmd --reload 3…

ranger的使用

安装 macOS brew install rangerubuntu sudo apt-get install ranger配置 启动之后ranger会创建一个目录~/.config/ranger 可以使用以下命令复制默认配置文件到这个目录 ranger --copy-configallrc.conf-选项设置和快捷键commands.py-能通过:执行的命令commands_full.py-全套…

产品展示型wordpress外贸网站模板

孕婴产品wordpress外贸网站模板 吸奶器、待产包、孕妇枕头、护理垫、纸尿裤、孕妇装、孕婴产品wordpress外贸网站模板。 https://www.jianzhanpress.com/?p4112 床品毛巾wordpress独立站模板 床单、被套、毛巾、抱枕、靠垫、围巾、布艺、枕头、乳胶枕、四件套、浴巾wordpre…

职场中的团队合作与个人成长

在职场中&#xff0c;团队合作和个人成长是两个不可或缺的要素。一个优秀的团队可以带来更高的工作效率和更好的业绩&#xff0c;而个人的成长则是职场成功的关键。本文将探讨如何在职场中实现团队合作与个人成长的平衡。 一、团队合作的重要性 在职场中&#xff0c;团队合作是…

ARM GNU 汇编 “每日读书“

在GNU ARM汇编程序中&#xff0c;如果我们想定义一个浮点数&#xff0c;那么可以使用下面的伪操作来定义。 标签&#xff0c;命令 f: .float 3.14 .equ f,3.1415 我们可以使用.float 伪操作定义一个浮点数f, 并初始化为3.14 如果你想将这个浮点数重新赋值为3.1415&#xff0c;则…

【Ubuntu】将多个python文件打包为.so文件

1.为什么要将python打包为.so文件&#xff1f; 保护源码 2.实战例子 a.安装相应的包 pip install cython 验证安装是否成功 cython --version b.实战的文件目录和内容 hi.py # This is a sample Python script.# Press ShiftF10 to execute it or replace it with your…