前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Vue3 Ajax(axios)(下)

Vue3 Ajax(axios)(下)

原创
作者头像
陈不成i
修改于 2021-07-29 02:38:24
修改于 2021-07-29 02:38:24
1.1K00
代码可运行
举报
文章被收录于专栏:ops技术分享ops技术分享
运行总次数:0
代码可运行

响应结构

axios请求的响应包含以下信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  // `data` 由服务器提供的响应
  data: {},

  // `status`  HTTP 状态码
  status: 200,

  // `statusText` 来自服务器响应的 HTTP 状态信息
  statusText: "OK",

  // `headers` 服务器响应的头
  headers: {},

  // `config` 是为请求提供的配置信息
  config: {}
}

使用 then 时,会接收下面这样的响应:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
axios.get("/user/12345")
  .then(function(response) {
    console.log(response.data);
    console.log(response.status);
    console.log(response.statusText);
    console.log(response.headers);
    console.log(response.config);
  });

在使用 catch 时,或传递 rejection callback 作为 then 的第二个参数时,响应可以通过 error 对象可被使用。

配置的默认值

你可以指定将被用在各个请求的配置默认值。

全局的 axios 默认值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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';

自定义实例默认值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 创建实例时设置配置的默认值
var instance = axios.create({
  baseURL: 'https://api.example.com'
});

// 在实例已创建后修改默认值
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;

配置的优先顺序

配置会以一个优先顺序进行合并。这个顺序是:在 lib/defaults.js 找到的库的默认值,然后是实例的 defaults 属性,最后是请求的 config 参数。后者将优先于前者。这里是一个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 使用由库提供的配置的默认值来创建实例
// 此时超时配置的默认值是 `0`
var instance = axios.create();

// 覆写库的超时默认值
// 现在,在超时前,所有请求都会等待 2.5 秒
instance.defaults.timeout = 2500;

// 为已知需要花费很长时间的请求覆写超时设置
instance.get('/longRequest', {
  timeout: 5000
});

拦截器

在请求或响应被 then 或 catch 处理前拦截它们。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response;
  }, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  });

如果你想在稍后移除拦截器,可以这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var myInterceptor = axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(myInterceptor);

可以为自定义 axios 实例添加拦截器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var instance = axios.create();
instance.interceptors.request.use(function () {/*...*/});

错误处理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
axios.get('/user/12345')
  .catch(function (error) {
    if (error.response) {
      // 请求已发出,但服务器响应的状态码不在 2xx 范围内
      console.log(error.response.data);
      console.log(error.response.status);
      console.log(error.response.headers);
    } else {
      // Something happened in setting up the request that triggered an Error
      console.log('Error', error.message);
    }
    console.log(error.config);
  });

可以使用 validateStatus 配置选项定义一个自定义 HTTP 状态码的错误范围。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
axios.get('/user/12345', {
  validateStatus: function (status) {
    return status < 500; // 状态码在大于或等于500时才会 reject
  }
})

取消

使用 cancel token 取消请求。

Axios 的 cancel token API 基于cancelable promises proposal

可以使用 CancelToken.source 工厂方法创建 cancel token,像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var CancelToken = axios.CancelToken;
var source = CancelToken.source();

axios.get('/user/12345', {
  cancelToken: source.token
}).catch(function(thrown) {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // 处理错误
  }
});

// 取消请求(message 参数是可选的)
source.cancel('Operation canceled by the user.');

还可以通过传递一个 executor 函数到 CancelToken 的构造函数来创建 cancel token:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var CancelToken = axios.CancelToken;
var cancel;

axios.get('/user/12345', {
  cancelToken: new CancelToken(function executor(c) {
    // executor 函数接收一个 cancel 函数作为参数
    cancel = c;
  })
});

// 取消请求
cancel();

注意:可以使用同一个 cancel token 取消多个请求。

请求时使用 application/x-www-form-urlencoded

axios 会默认序列化 JavaScript 对象为 JSON。 如果想使用 application/x-www-form-urlencoded 格式,你可以使用下面的配置。

浏览器

在浏览器环境,你可以使用 URLSearchParams API:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params);

URLSearchParams 不是所有的浏览器均支持。

除此之外,你可以使用 qs 库来编码数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 }));

// Or in another way (ES6),

import qs from 'qs';
const data = { 'bar': 123 };
const options = {
  method: 'POST',
  headers: { 'content-type': 'application/x-www-form-urlencoded' },
  data: qs.stringify(data),
  url,
};
axios(options);

Node.js 环境

在 node.js里, 可以使用 querystring 模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const querystring = require('querystring');
axios.post('http://something.com/', querystring.stringify({ foo: 'bar' }));

当然,同浏览器一样,你还可以使用 qs 库。

Promises

axios 依赖原生的 ES6 Promise 实现而被支持

如果你的环境不支持 ES6 Promise,你可以使用 polyfill

TypeScript支持

axios 包含 TypeScript 的定义。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import axios from "axios";
axios.get("/user?ID=12345");

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
总结Vue3 的一些知识点:Vue3 Ajax(axios)
Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中。
爱学iOS的小麦子
2023/05/26
2K0
axios介绍与使用说明 axios中文文档
本周在做一个使用vuejs的前端项目,访问后端服务使用axios库,这里对照官方文档,简单记录下,也方便大家参考。 Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中。github开源地址https://github.com/axios/axios 特性 在浏览器中创建 XMLHttpRequests 在 node.js 则创建 http 请求 支持 Promise API 支持拦截请求和响应 转换请求和响应数据 取消请求 自动转换 JSON 数据 客户端支持防御
JadePeng
2018/04/16
84.5K0
axios2教程
axios 是一个基于 promise 的 HTTP 库,用于浏览器和node.js的http客户端,支持拦截请求和响应,自动转换 JSON 数据, 客户端支持防御 XSRF。axios2官方链接
飞狗
2018/09/10
3.3K0
axios2教程
Vue.js Ajax请求配置项
下面是创建请求时可用的配置选项,注意只有 url 是必需的。如果没有指定 method,请求将默认使用 get 方法。
陈不成i
2021/07/27
3.3K0
【收藏干货】axios配置大全
//当实例创建时候修改配置 instance.defaults.headers.common["Authorization"] = AUTH_TOKEN; 3、 配置中的有优先级
super.x
2019/04/12
1.1K0
axios : Promise based HTTP client for the browser and node.jsaxios
Promise based HTTP client for the browser and node.js
一个会写诗的程序员
2018/08/17
9280
Vue笔记:使用 axios 发送请求
在Vue1.0的时候有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource。
朝雨忆轻尘
2019/06/19
2.1K0
axios知识盲点整理
JsonServer主要的作用就是搭建本地的数据接口,创建json文件,便于调试调用,模拟和后端服务器进行数据的交互
大忽悠爱学习
2021/11/15
4.2K0
Axios基本使用
Axios Axios 是一个基于promise的HTTP库,可以用在浏览器和node.js中。
ZEHAN
2020/10/29
1.9K0
axios详解以及完整封装方法
Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。
HelloWorldZ
2024/03/20
11K0
Axios是什么?用在什么场景?如何使用?
Axios 是一个基于 promise 的 HTTP 库,简单的讲就是可以发送get、post请求。说到get、post,大家应该第一时间想到的就是Jquery吧,毕竟前几年Jquery比较火的时候,大家都在用他。但是由于Vue、React等框架的出现,Jquery也不是那么吃香了。也正是Vue、React等框架的出现,促使了Axios轻量级库的出现,因为Vue等,不需要操作Dom,所以不需要引入Jquery.js了。
Javanx
2019/09/04
5.1K0
Axios是什么?用在什么场景?如何使用?
【axios】002-axios发起请求
axios.interceptors.request.use():添加请求拦截器;
訾博ZiBo
2025/01/06
2030
前端MVC Vue2学习总结(六)——axios与跨域HTTP请求、Lodash工具库
一、axios Vue更新到2.0之后宣告不再对vue-resource更新,推荐使用axios,axios是一个用于客户端与服务器通信的组件,axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端javaScript工具。通俗来说可以实现客户端请求服务器端提供的服务获得数据。 源码与帮助:https://github.com/axios/axios 服务器端跨域支持请查看:http://www.cnblogs.com/best/p/6196202.html#_label2
张果
2018/03/30
6.1K0
前端MVC Vue2学习总结(六)——axios与跨域HTTP请求、Lodash工具库
axios
我第一次接触ajax是从JQuery ajax开始的。但是对于现在的脚手架方式,不会有人往项目中引入jQuery。因为JQuery已经不太常用了。
用户4793865
2023/01/12
4.3K0
JavaScript HTTP客户端库axios介绍
HTTP客户端是很多时候我们都需要用到的功能,今天就来介绍一个比较流行的JavaScript编写的HTTP客户端库axios。 安装 如果你会使用npm的话,可以使用npm来装,非常方便。 $ npm
乐百川
2018/01/09
2.3K0
一、Axios基础
参考文档:http://www.axios-js.com/zh-cn/docs/ axios库基本概念 它是一个类库,基于promise管理的Ajax库 关于get、post方法的参数 url 第一个参数,请求的url地址 options 对象。 get方法 axios.get('https://v1.hitokoto.cn/', { params: { c: "b" } }).then(function (res) { console.log(res); })
Dreamy.TZK
2020/08/25
1.7K0
一文让你认识 axios
如果要全局使用axios就需要在main.js中设置成全局的,然后再组件中通过this调用
公众号---人生代码
2020/07/02
1.1K0
React学习笔记(三)—— 组件高级
下面了的代码,我们用到了数组函数的map方法来实现数组的每一个值变成它的2倍,同时返回一个新数组,最后打印出了这个数组:
张果
2023/03/11
8.6K0
React学习笔记(三)—— 组件高级
Axios携带数据发送请求及后端接收方式
因为参数是直接放在请求体(Payload Body)中,所以需要从请求体中拿到数据: 使用@RequestBody注解从请求体中拿到数据,同样也是可以使用对应的实体类或参数接收
十玖八柒
2022/08/01
10.5K1
Axios携带数据发送请求及后端接收方式
Vue3 Ajax(axios)(上)
Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中。
陈不成i
2021/07/28
2K0
相关推荐
总结Vue3 的一些知识点:Vue3 Ajax(axios)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档