[https://www.cnblogs.com/jpwz/p/12942538.html](https://www.cnblogs.com/jpwz/p/12942538.html)
## 1、基本用法
安装
~~~shell
cnpm i axios --save
~~~
在`main.js`中引入`axios`
~~~javascript
import axios from 'axios'
Vue.prototype.$axios = axios
~~~
在组件中使用`axios`
~~~vue
<script>
export default {
mounted(){
this.$axios.get('/goods.json').then(res=>{
console.log(res.data);
})
}
}
</script>
~~~
## 2、axios请求方法
axios可以请求的方法:
* get:获取数据,请求指定的信息,返回实体对象
* post:向指定资源提交数据(例如表单提交或文件上传)
* put:更新数据,从客户端向服务器传送的数据取代指定的文档的内容
* patch:更新数据,是对put方法的补充,用来对已知资源进行局部更新
* delete:请求服务器删除指定的数据
### 2.1、get请求
示例代码
~~~javascript
//方法一,请求格式类似于 http://localhost:8080/goods.json?id=1
this.$axios.get('/goods.json',
{
params: {
id:1
}
}).then(res=>{
console.log(res.data);
},err=>{
console.log(err);
})
//方法二
this.$axios({
method: 'get',
url: '/goods.json',
params: {
id:1
}
}).then(res=>{
console.log(res.data);
},err=>{
console.log(err);
})
~~~
### 2.2、post请求
post请求一般分为两种类型
* form-data 表单提交,图片上传、文件上传时用该类型比较多
* application/json 一般是用于 ajax 异步请求
示例代码
~~~javascript
//方法一
this.$axios.post('/url',{
id:1
}).then(res=>{
console.log(res.data);
},err=>{
console.log(err);
})
//方法二
$axios({
method: 'post',
url: '/url',
data: {
id:1
}
}).then(res=>{
console.log(res.data);
},err=>{
console.log(err);
})
//form-data请求
let data = {
//请求参数
}
let formdata = new FormData();
for(let key in data){
formdata.append(key,data[key]);
}
this.$axios.post('/goods.json',formdata).then(res=>{
console.log(res.data);
},err=>{
console.log(err);
})
~~~
### 2.3、put和patch请求
示例代码
~~~javascript
//put请求
this.$axios.put('/url',{
id:1
}).then(res=>{
console.log(res.data);
})
//patch请求
this.$axios.put('/url',{
id:1
}).then(res=>{
console.log(res.data);
})
~~~
### 2.4、delete请求
示例代码
~~~javascript
//参数以明文形式提交
this.$axios.delete('/url',{
params: {
id:1
}
}).then(res=>{
console.log(res.data);
})
//参数以封装对象的形式提交
this.$axios.delete('/url',{
data: {
id:1
}
}).then(res=>{
console.log(res.data);
})
//方法二
axios({
method: 'delete',
url: '/url',
params: { id:1 }, //以明文方式提交参数
data: { id:1 } //以封装对象方式提交参数
}).then(res=>{
console.log(res.data);
})
~~~
## 3、并发请求
并发请求:同时进行多个请求,并统一处理返回值
示例代码
~~~javascript
this.$axios.all([
this.$axios.get('/goods.json'),
this.$axios.get('/classify.json')
]).then(
this.$axios.spread((goodsRes,classifyRes)=>{
console.log(goodsRes.data);
console.log(classifyRes.data);
})
)
~~~
## 4、axios实例
### 4.1、创建axios实例
示例代码
~~~javascript
let instance = this.$axios.create({
baseURL: 'http://localhost:9090',
timeout: 2000
})
instance.get('/goods.json').then(res=>{
console.log(res.data);
})
~~~
可以同时创建多个axios实例。
axios实例常用配置:
* baseURL 请求的域名,基本地址,类型:String
* timeout 请求超时时长,单位ms,类型:Number
* url 请求路径,类型:String
* method 请求方法,类型:String
* headers 设置请求头,类型:Object
* params 请求参数,将参数拼接在URL上,类型:Object
* data 请求参数,将参数放到请求体中,类型:Object
### 4.2、axios全局配置
示例代码
~~~javascript
//配置全局的超时时长
this.$axios.defaults.timeout = 2000;
//配置全局的基本URL
this.$axios.defaults.baseURL = 'http://localhost:8080';
~~~
### 4.3、axios实例配置
示例代码
~~~javascript
let instance = this.$axios.create();
instance.defaults.timeout = 3000;
~~~
### 4.4、axios请求配置
示例代码
~~~javascript
this.$axios.get('/goods.json',{
timeout: 3000
}).then()
~~~
以上配置的优先级为:`请求配置 > 实例配置 > 全局配置`
## 5、拦截器
拦截器:在请求或响应被处理前拦截它们
### 5.1、请求拦截器
示例代码
~~~javascript
this.$axios.interceptors.request.use(config=>{
// 发生请求前的处理
return config
},err=>{
// 请求错误处理
return Promise.reject(err);
})
//或者用axios实例创建拦截器
let instance = $axios.create();
instance.interceptors.request.use(config=>{
return config
})
~~~
### 5.2、响应拦截器
示例代码
~~~javascript
this.$axios.interceptors.response.use(res=>{
//请求成功对响应数据做处理
return res //该返回对象会传到请求方法的响应对象中
},err=>{
// 响应错误处理
return Promise.reject(err);
})
~~~
### 5.3、取消拦截
示例代码
~~~javascript
let instance = this.$axios.interceptors.request.use(config=>{
config.headers = {
token: ''
}
return config
})
//取消拦截
this.$axios.interceptors.request.eject(instance);
~~~
## 6、错误处理
示例代码
~~~javascript
this.$axios.get('/url').then(res={
}).catch(err=>{
//请求拦截器和响应拦截器抛出错误时,返回的err对象会传给当前函数的err对象
console.log(err);
})
~~~
## 7、取消请求
主要用于取消正在进行的http请求。
示例代码
~~~javascript
let source = this.$axios.CancelToken.source();
this.$axios.get('/goods.json',{
cancelToken: source
}).then(res=>{
console.log(res)
}).catch(err=>{
//取消请求后会执行该方法
console.log(err)
})
//取消请求,参数可选,该参数信息会发送到请求的catch中
source.cancel('取消后的信息');
~~~
- 空白目录1
- RBAC
- RBAC权限模型[完整]
- 你知道权限管理的RBAC模型吗?
- rbac 一个用户对应多个账号_如何设计一个强大的权限系统
- Postman 快速使用(设置环境变量)
- postman的使用方法详解!最全面的教程
- Postman常用的几个功能
- ThinkPHP项目总结
- thinkphp5 递归查询所有子代,查询上级,并且获取层级
- PHP原生项目之留言板
- 智慧校园
- PHP如何实现订单的延时处理详解
- VUE
- const {data:res} = await login(this.loginForm)
- Vue中的async和await的使用
- PHP实现消息推送(定时轮询)
- tp5 计算两个日期之间相差的天数
- 使用jquery的ajax方法获取下拉列表值
- jQuery实现select下拉框选中数据触发事件
- SetFocus 方法
- 快来了解下TP6中的超级函数app()!
- PHP socket 服务器框架 workerman
- 程序员如何才能成为独立开发者?
- PHP 错误处理
- php面向对象类中的$this,static,final,const,self及双冒号 :: 这几个关键字使用方法。
- 小白教你玩转php的闭包
- 关于TP6项目搭建的坑(多应用模式)
- ThinkPHP6.0 与5.0的差别及坑点
- axios在vue项目中的使用实例详解
- php中的类、对象、方法是指什么
- 聊一聊PHP的依赖注入(DI) 和 控制反转(IoC)
- 深入理解控制反转(IoC)和依赖注入(DI)
- Private,Public,Protected
- ThinkPHP5(目录,路径,模式设置,命名空间)
- 在 ThinkPHP6 中使用 Workerman
- 介绍thinkphp lock锁的使用和例子
- php中_initialize()函数与 __construct()函数的区别说明
- api接口数据-验证-整理
- api接口数据-验证-整理【续】
- TP6容易踩得坑【原创】
- TP6的日志怎么能记录详细的日志?
- 是否需要模型分层
- PHP面试题 全网最硬核面试题来了 2021年学习面试跳槽必备(一)
- MySQL单表数据量过千万,采坑优化记录,完美解决方案
- MySql表分区(根据时间timestamp)
- MySQL大表优化方案
- 闲言碎语
- 数据库外键的使用
- 深入理解thinkphp、laravel等框架中容器概念
- vue做前端,thinkphp6做后台,项目部署
- 简单MVC架构的PHP留言本
- TP5里面extend和vendor的区别
- 在mysql数据库中制作千万级测试表
- MySQL千万级的大表要怎么优化
- ThinkPHP关联模型操作实例分析
- lcobucci/jwt —— 一个轻松生成jwt token的插件
- RESTful API 设计指南
- MySQL如何为表字段添加索引
- ThinkPHP6.0快速开发手册(案例版)
- tp5 静态方法和普通方法的区别
- 数据字典功能
- mysql中的数据库ID主键的设置问题
- 基于角色的权限控制(django内置auth体系)
- RBAC系统经典五张表
- 什么是接口文档,如何写接口,有什么规范?
- thinkphp5.0自定义验证器