Vue3 Ajax(axios)

关键要点

  • Axios 是一个基于 Promise 的 HTTP 库,适合在 Vue3 中处理 AJAX 请求。
  • 支持多种安装方式,包括 CDN、NPM、Bower 和 Yarn。
  • 提供 GET、POST 等请求方法,支持并发请求和请求取消。
  • 可以设置默认配置,如 baseURL、timeout 和 headers。

安装与基本使用

首先,通过 CDN 或包管理器安装 Axios。例如,使用 CDN:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
或使用 NPM:$ npm install axios

基本 GET 请求示例:

axios.get('/user?ID=12345').then(response => console.log(response)).catch(error => console.log(error));

POST 请求示例:

axios.post('/user', { firstName: 'Fred', lastName: 'Flintstone' }).then(response => console.log(response)).catch(error => console.log(error));

高级功能

  • 并发请求:使用 Promise.allaxios.all 处理多个请求。
  • 创建实例axios.create({ baseURL: 'https://some-domain.com/api/', timeout: 1000, headers: {'X-Custom-Header': 'foobar'} })
  • 拦截器:通过 axios.interceptors.request.use()axios.interceptors.response.use() 拦截请求和响应。
  • 取消请求:使用 CancelToken 取消正在进行的请求。

更多资源

详细内容请参考:菜鸟教程 – Vue3 Ajax(axios)


详细报告

Vue3 中使用 Axios 进行 AJAX 请求是一种常见的做法,Axios 是一个基于 Promise 的 HTTP 客户端,适用于浏览器和 Node.js 环境。以下是关于 Vue3 与 Axios 的全面讲解,涵盖安装、基本使用、高级功能和注意事项。

背景与定义

AJAX(Asynchronous JavaScript and XML)是一种在不刷新页面的情况下与服务器异步交换数据的技术。在 Vue3 中,官方推荐使用 Axios 来完成 AJAX 请求,因为它提供了简洁的 API,支持 Promise,易于处理异步操作,并内置了请求和响应拦截器。

Axios 的 GitHub 开源地址为 https://github.com/axios/axios,是一个成熟且广泛使用的库。

安装方法

Axios 支持多种安装方式,适合不同开发环境:

  • CDN:直接在 HTML 中引用,例如:
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

    <script src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/axios/0.26.0/axios.min.js" type="application/javascript"></script>
  • NPM$ npm install axios
  • Bower$ bower install axios
  • Yarn$ yarn add axios

安装完成后,可以通过 import axios from 'axios' 在代码中引入。

基本使用

Axios 提供了多种 HTTP 方法,常见的有 GET 和 POST。以下是示例:

GET 请求

GET 请求用于从服务器获取数据,示例代码如下:

axios.get('/user?ID=12345')
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  })
  .finally(function () {
    // 总是执行
  });

也可以使用参数对象:

axios.get('/user', {
  params: {
    ID: 12345
  }
}).then(response => console.log(response)).catch(error => console.log(error));

使用 async/await 语法:

async function getUser() {
  try {
    const response = await axios.get('/user?ID=12345');
    console.log(response);
  } catch (error) {
    console.error(error);
  }
}

注意:async/await 是 ECMAScript 2017 的一部分,不支持 Internet Explorer 和老旧浏览器。

POST 请求

POST 请求用于向服务器发送数据,示例代码如下:

axios.post('/user', {
  firstName: 'Fred',
  lastName: 'Flintstone'
}).then(response => console.log(response)).catch(error => console.log(error));

并发请求

当需要同时发送多个请求时,可以使用 Promise.all 或 Axios 提供的并发助手:

  • 使用 Promise.all
  Promise.all([getUserAccount(), getUserPermissions()])
    .then(results => {
      const acct = results[0];
      const perm = results[1];
    });
  • 使用 Axios 的 allspread
  axios.all([getUserAccount(), getUserPermissions()])
    .then(axios.spread((acct, perms) => {
      // 处理结果
    }));

创建实例

可以创建 Axios 实例以设置默认配置,适用于需要重复使用的场景:

const instance = axios.create({
  baseURL: 'https://some-domain.com/api/',
  timeout: 1000,
  headers: {'X-Custom-Header': 'foobar'}
});

实例创建后,可以像普通 Axios 一样使用,例如 instance.get('/user')

配置选项

Axios 支持丰富的配置选项,以下是常见选项的表格:

选项名称描述默认值
url请求 URL(必需)
method请求方法‘get’
baseURL请求基础 URL
headers自定义请求头{}
paramsURL 查询参数{}
data请求体数据
timeout请求超时时间(毫秒)0(无超时)
withCredentials是否携带凭证(如 Cookie)false
responseType响应数据类型‘json’
xsrfCookieNameXSRF 令牌 Cookie 名称‘XSRF-TOKEN’
xsrfHeaderNameXSRF 令牌 Header 名称‘X-XSRF-TOKEN’
onUploadProgress上传进度回调
onDownloadProgress下载进度回调
maxContentLength最大内容长度2000
maxRedirects最大重定向次数5

更多配置选项请参考官方文档。

响应结构

每个 Axios 响应包含以下属性:

  • data:响应数据。
  • status:HTTP 状态码。
  • statusText:HTTP 状态文本。
  • headers:响应头。
  • config:请求配置。

示例:

axios.get('/user')
  .then(response => {
    console.log(response.data); // 响应数据
    console.log(response.status); // 状态码,如 200
  });

默认配置

可以设置 Axios 的默认配置,适用于全局:

axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

拦截器

拦截器允许在请求发送前或响应返回前进行处理。示例:

  • 请求拦截:
  axios.interceptors.request.use(config => {
    // 在发送请求之前做些什么
    return config;
  }, error => {
    // 对请求错误做些什么
    return Promise.reject(error);
  });
  • 响应拦截:
  axios.interceptors.response.use(response => {
    // 对响应数据做些什么
    return response;
  }, error => {
    // 对响应错误做些什么
    return Promise.reject(error);
  });

拦截器可以通过 eject 方法移除。

取消请求

可以使用 CancelToken 取消请求,示例:

const source = CancelToken.source();
axios.get('/user', {
  cancelToken: source.token
}).catch(error => {
  if (axios.isCancel(error)) {
    console.log('Request canceled', error.message);
  }
});
source.cancel('Operation canceled by the user.');

也可以通过 executor 创建:

new CancelToken(function executor(c) {
  // 取消函数
  cancel = c;
});
cancel();

表单 URL 编码

对于表单数据:

  • 浏览器中,可以使用 URLSearchParamsqs 库。
  • Node.js 中,可以使用 querystringqs 库。

示例:

const params = new URLSearchParams();
params.append('name', 'value');
axios.post('/form', params);

TypeScript 支持

Axios 对 TypeScript 有良好的支持,示例:

import axios from "axios";
axios.get("/user?ID=12345");

可以定义类型以增强代码提示。

注意事项

  • async/await 不支持 Internet Explorer 和老旧浏览器,需注意兼容性。
  • 使用历史模式(createWebHistory)时,需服务器配置,否则刷新可能出现 404。
  • 并发请求时,确保处理好错误,避免部分请求失败影响整体。

总结

Vue3 中使用 Axios 进行 AJAX 请求简单高效,支持多种高级功能如拦截器和取消请求。建议根据项目需求选择合适的安装方式,并注意浏览器兼容性和服务器配置。

关键引文

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注