目录

axios 是什么

axios 特点

axios 中文文档

axios 常用语法

axios 安装

axios 简单使用

默认 get 请求

post 请求

axios 难点语法

axios.create(config) 对 axios 请求进行二次封装

axios的处理链流程 拦截器

取消请求

请求前 / 后数据处理


axios 是什么

  1. 前端最流行的 ajax 请求库
  2. react / vue 官方推荐使用 axios 发 ajax 请求
  3. 文档   https://github.com/axios/axios

axios 特点

  1. 基于 promise 的异步 ajax 请求库
  2. 浏览器端 /node 端都可以使用
  3. 支持请求 / 响应拦截器
  4. 支持请求取消
  5. 请求 / 响应数据转换
  6. 批量发送多个请求

axios 中文文档

axios中文网|axios API 中文文档 | axios

axios 常用语法

axios 安装

axios 简单使用

默认 get 请求

// 配置默认基本路径
axios.defaults.baseURL = 'http://localhost:3000'// 默认 get 请求
axios({url:"/posts",params:{id:1}
}).then(res=>{console.log(res)
},err=>{console.log(err)
})

post 请求

// post 请求
axios.post("/posts",{id:1}).then(res=>{console.log(res)
},err=>{console.log(err)
})// 或axios({url:"/posts",method:'post'data:{id:1}
}).then(res=>{console.log(res)
},err=>{console.log(err)
})

axios 难点语法

axios.create(config) 对 axios 请求进行二次封装

简单使用 :

const instance = axios.create({baseURL:"http://localhost:3000"
})// 使用 instance 发请求
instance({url:"/posts"
})// 或
instance.get("/posts")

同时请求 多个端口号 :

const instance = axios.create({baseURL:"http://localhost:3000"
})const instance2 = axios.create({baseURL:"http://localhost:4000"
})// 同时请求 端口号 3000 4000// 使用 instance 发请求
instance({url:"/posts"
})// 使用 instance2 发请求
instance2({url:"/posts"
})

axios的处理链流程 拦截器

拦截器简单使用 :

// 添加请求拦截器
axios.interceptors.request.use(config=>{// config 请求配置// 可用于// 发送网络请求时,在界面显示一个请求的同步动画// 某些请求(比如登录(token))必须携带一些特殊的信息// 请求成功拦截console.log("请求拦截器")return config
},err=>{// 请求失败拦截return Promise.reject(err)
})  // 添加响应拦截器
axios.interceptors.response.use(res=>{// res 响应结果// 响应拦成功拦截console.log("响应拦截器")return res
},err=>{// 响应拦失败拦截return Promise.reject(err)
})  console.log("开始请求")
axios.get("http://localhost:3000/posts")
.then(res=>{console.log("res:",res)console.log("请求结束")
})

多个拦截器

请求拦截器后添加先执行

// 添加请求拦截器
axios.interceptors.request.use(config=>{console.log("请求拦截器")return config
},err=>{return Promise.reject(err)
})  axios.interceptors.request.use(config=>{console.log("请求拦截器--------2")return config
},err=>{return Promise.reject(err)
})  axios.interceptors.request.use(config=>{console.log("请求拦截器--------3")return config
},err=>{return Promise.reject(err)
})  // 添加响应拦截器
axios.interceptors.response.use(res=>{console.log("响应拦截器")return res
},err=>{return Promise.reject(err)
})  axios.interceptors.response.use(res=>{console.log("响应拦截器---------2")return res
},err=>{return Promise.reject(err)
}) axios.interceptors.response.use(res=>{console.log("响应拦截器----------3")return res
},err=>{return Promise.reject(err)
})console.log("开始请求")
axios.get("http://localhost:3000/posts")
.then(res=>{console.log("res:",res)console.log("请求结束")
})

取消请求

1. 基本流程

配置 cancelToken 对象
缓存用于取消请求的 cancel 函数
在后面特定时机调用 cancel 函数取消请求
在错误回调中判断如果 error 是 cancel ,做相应处理

2. 实现功能

node 运行 server.js
安装 node 和 express (npm install express)

var http = require("http");var express = require("express")
// var server = http.createServer();
var app = express()// node跨域设置
app.all("*",function(req,res,next){// 设置允许跨域的域名,*代表允许任意域名跨域res.header("Access-Control-Allow-Origin","*");// 允许的header类型res.header("Access-Control-Allow-Headers","content-type");// 跨域允许的请求方式 res.header("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS");if (req.method.toLowerCase() == 'options')res.send(200);  // 让options尝试请求快速结束elsenext();
})app.get('/',function(res,req){console.log("获取客户端请求",res);// 延迟响应 方便测试取消接口setTimeout(function(){req.end("延迟响应 方便测试取消接口"); // 响应客户数据},5000)})app.listen(4000,function(){console.log("服务器启动成功,可以通过 http://127.0.0.1:4000 进行访问")
})

在 cmd 窗口

node server.js

调用接口测试
axios.isCancel(err)  // 判断错误是否 是取消请求导致的

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><script src="https://cdn.bootcss.com/axios/0.19.0/axios.js"></script>
</head>
<body><script>let cancel;// axios({//     url:"http://localhost:4000",//     cancelToken:new axios.CancelToken(function(c){//         cancel = c//     })// })// 或axios.get("http://localhost:4000",{cancelToken:new axios.CancelToken(function(c){// c 用于取消当前请求的函数cancel = c})}).then(res=>{console.log("res:",res)cancel = null //请求完成,清空cancel},err=>{cancel = null if(err.constructor.name === 'Cancel'){ //是取消请求导致的errerconsole.log("取消请求导致error:",err)}else{console.log("err:",err)}// 或// axios.isCancel(err) //判断错误是否 是取消请求导致的});setTimeout(function(){if(typeof(cancel) === 'function'){cancel('强制取消了请求')}else{console.log("没有可取消的请求")}},2000)</script>
</body>
</html>

正常请求

取消接口

在 请求拦截器里面统一添加取消请求 

axios.interceptors.request.use(res=>{res['cancelToken'] = new axios.CancelToken(function(c){cancel = c})return res
},err=>{return Promise.reject(err)
}) 

在 响应拦截器里面统一添加 处理取消请求

axios.interceptors.response.use(res=>{return res
},err=>{if(axios.isCancel(err)){// 中断promise链接return new Promise(()=>{})}else{// 把错误继续向下传递return Promise.reject(err)}
}) 

代码简化 实现上一个接口还未响应 下一个接口开始请求,把上一个接口取消

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><script src="https://cdn.bootcss.com/axios/0.19.0/axios.js"></script>
</head>
<body><script>let cancel;axios.interceptors.request.use(config=>{// 实现上一个接口还未响应  下一个接口开始请求,把上一个接口取消if(typeof(cancel) === 'function'){cancel('强制取消了请求')}config['cancelToken'] = new axios.CancelToken(function(c){cancel = c})return config},err=>{return Promise.reject(err)}) axios.interceptors.response.use(res=>{cancel = null return res},err=>{cancel = null if(axios.isCancel(err)){console.log("取消上一个请求")// 中断promise链接return new Promise(()=>{})}else{// 把错误继续向下传递return Promise.reject(err)}})  function request(){axios.get("http://localhost:4000").then(res=>{console.log("res:",res)},err=>{console.log("err:",err)});}request()request()</script>
</body>
</html>

请求前 / 后数据处理

// 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法
transformRequest:[function (data, headers) {// 对 data 进行任意转换处理return data;
}],// 在传递给 then/catch 前,允许修改响应数据
transformResponse: [function (data) {// 对 data 进行任意转换处理return data;
}],

axios 数据请求二次封装及实战案例_雨季mo浅忆的博客-CSDN博客

axios 的理解和使用相关推荐

  1. axios从入门到源码分析 -http-xhr

    axios从入门到源码分析 1 HTTP相关 1.1.MDN文档 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Overview 1.2. HTT ...

  2. axios (get,post,put,delete),常用配置,全局配置,axios.create(config)配置一个新的axios

    目录 axios 的理解和应用 axios 特点: 使用 axios 发 ajax请求 1. 发送 GET 请求 axios get完整版: axios get精简版: axios get请求发送时携 ...

  3. axios的使用(请求,响应拦截器)

    axios的使用 本篇博客简要讲述本人在前端vue开发过程中对于axios的理解 文章目录 axios的使用 前言 一.axios是什么? 二.使用步骤 1.引入库 2.axios使用 1,引用axi ...

  4. 尚硅谷 Ajax与Axios的使用与关键源码 笔记

    文章目录 Ajax概述 原生Ajax尝试 请求的发送与请求头配置 JSON支持 IE缓存问题 请求的取消与重发 jQuery的Ajax 使用Axios发送Ajax[简易] 使用fetch发送请求 Aj ...

  5. 一个项目学会前端实现登录拦截

    一个项目学会vue全家桶+axios实现登录.拦截.登出功能,以及利用axios的http拦截器拦截请求和响应. 前言 该项目是利用了Github 提供的personal token作为登录token ...

  6. react-移动端项目

    移动端项目 一 明确案例的需求 需要理解的概念有: 手机验证码的登录 手机验证码的获取 第三方平台的授权登录 第三方平台用户信息的获取 二 antd的基本使用 需要理解的概念有: React的UI框架 ...

  7. axios-引入-常用语法-源码

    axios 1 axios的引入 1.1. axios是什么? 前端最流行的ajax请求库 react/vue官方都推荐使用axios发ajax请求 文档: https://github.com/ax ...

  8. Vue 中常见的面试题/知识点整理

    看看面试题,只是为了查漏补缺,看看自己那些方面还不懂.切记不要以为背了面试题,就万事大吉了,最好是理解背后的原理,这样面试的时候才能侃侃而谈.不然,稍微有水平的面试官一看就能看出,是否有真才实学还是刚 ...

  9. 2年vue项目实战经验汇总

    前言 vue作为前端主流的3大框架之一,目前在国内有着非常广泛的应用,由于其轻量和自底向上的渐进式设计思想,使其不仅仅被应用于PC系统,对于移动端,桌面软件(electronjs)等也有广泛的应用,与 ...

最新文章

  1. CentOS7中关闭selinux
  2. Vue005_ 列表渲染
  3. C与CPP 在线手册查找
  4. 区块链 matlab,matlab可以实现区块链吗?
  5. Java 输出链表的第一个和最后一个元素
  6. Eclipse设置Courier New字体
  7. table表头固定4种方法_移动式、半移动式、半固定式、固定式4种破碎站详细介绍及优缺点对比...
  8. JAVA学生信息管理系统IO流版
  9. mysql5.7.11解压安装_mysql 5.7.11解压安装教程
  10. webmin开新网站/创建虚拟服务器失败setquota: Quota file not found
  11. jquery autocomplete s.toLowerCase(); 对象不支持此属性或方法
  12. WPF中监听剪贴板存在的Bug:OpenClipboard HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN))错误
  13. vs2010 正式版官方下载地址
  14. 麻将胡牌判定方法-索引法
  15. 解决Maven下载速度缓慢问题
  16. 十问数据库:问来路,问现在,问未来
  17. 减法器运算电路公式推导
  18. K-means 代碼
  19. 如何使用ROS控制真实UR5机器人
  20. java poi 读写操作excel

热门文章

  1. 服务器数据监控、业务数据监控调研
  2. 【调剂】大连交通大学2020年硕士研究生预调剂报名
  3. 计算机二级题库,计算机二级题库office
  4. 用Python模拟登录学校教务系统抢课
  5. 淘宝API接口,获得淘宝app商品详情原数据(Onebound数据)
  6. 别当鸵鸟!网络安全实施工作中的6大障碍
  7. 最近很火的斗鱼大王卡动态线路免流系统搭建教程联通电信必免
  8. 金融街论坛召开,百度说了这几件事
  9. Java程序员大厂四面,成功拿到美团offer, 我总结了这份面试真题
  10. Google Nexus 5X 8.1 Root 安装Xposed Https代理教程