特点:支持promise API 、 拦截请求和响应、转换请求数据和响应数据、取消请求、自动转换JSON数据、客户端支持防御XSRF等;

axios请求方法(需后端定义):get获取数据、 post提交数据(用于表单提交和文件上传)、 patch更新(只将修改的数据推送到后端)、 put更新(所有数据都推送到后端)、 delete删除数据

例如:axios_test.vue:

<script>
export default{
name:'axios_test',
components:{},
created(){
//get
axios.get('/data.json',{params:{id:12,name:'zs'}}).then((res)=>{
console.log(res);
})
或:axios({
method:'get',
url:'/data.json',
params:{
id:12,
name:'zs'
}
}).then((res)=>{
console.log(res);
})
//post
axios.post('/xxx').then({
// 默认application/json常用,用于没有上传文件时,用法同上不详写了
// form-data 表单提交(用于文件上传)
let data = { id:12}
let formData = new FormData()
for(let key in data){
formData.append(key,data[key]);
}
axios.post('post',formData).then(res=>{
console.log(res)
})
})
//put/patch
axios.put('/put',data).then(res=>{
console.log(res);
})
//delete
axios.delete('/delete',{ params:{id:12}}).then(res=>{}) //实则底层调用get请求,params数据将添加到url中去;
axios.delete('/delete',{ data:{id:12}}).then(res=>{}) //实则底层调用post请求,data数据将放在请求体中;
//并发请求:同时进行多个请求,并统一处理返回值。 axios.all()和axios.spread()
axios.all([
axios.get('/data.json'),
axios.get('/city.json')
]).then(
axios.spread((dataRes,cityRes)=>{
console.log(dataRes,cityRes);
})
) //创建axios实例
let instance = axios.create({ //设置后会覆盖以前的设置
baseURL:'http://localhost:8080',
timeout:1000,
url:'/data.json',
method:'get/post/put/patch/delete',
headers:{token:''}, //设置请求头
params:{}, //请求参数拼接到url上
data:{} //请求参数放到请求体中
})
let instance2 = axios.create()
instance.get('/data.json').then(res=>{})
//1、axios全局配置
axios.defaults.timeout = 1000;
axios.defaults.baseURL = 'http://localhost:8080'
//2、axios实例配置(常用方式)
let instance = axios.create() //单独创建防止全局污染
instance.defaults.timeout=3000 //单独设置防止覆盖其他设置
//3、axios请求配置 (三种方式中优先级最高)
instance.get('/data.json',{
time:5000
}) //拦截器:在请求或响应被处理前拦截它们,分为请求拦截器和响应拦截器
//请求拦截器
axios.interceptors.request.use(config=>{
//在发送请求前做些什么
return config
},err=>{
//在请求发生错误时怎么处理
return Promise.reject(err)
})
//响应拦截器
axios.interceptors.response.use(config=>{
//请求成功对响应数据做处理
return res
},err=>{
//在响应发生错误时怎么处理
return Promise.reject(err)
})
//取消拦截器(了解)
let interceptor = axios.interceptors.request.use(config=>{
config.headers={ auto:true}
return config
})
axios.interceptors.request.eject(interceptor);
//拦截器例子1:比如微博评论时需要先登录
let instance = axios.create({})
instance.interceptors.request.use(config=>{
config.headers.token = '';
return config
})
//拦截器例子2:移动端开发时的请求等待
let instance_phone = axios.create({})
instance_phone.interceptors.request.use(config=>{
$('#modal').show() // 请求等待弹窗
return config
})
instance_phone.interceptors.response.use(res=>{
$('#modal').hide() // 请求等待弹窗隐藏
return res
})
//错误处理 实际开发中,一般添加统一错误处理,特殊的单独添加。
//添加请求错误处理拦截器
let instance = axios.create({})
instance.interceptors.request(config=>{
return config
},err=>{
//请求错误 一般http状态码以4开头,常见:401超时,404 没找到
$('#modal').show()
setTimeout(()=>{
$('#modal').hide()
},2000)
return Promise.reject(err)
})
//添加响应错误处理拦截器
instance.interceptors.response(res=>{
return res
},err=>{
//响应错误 一般http状态码以5开头,常见:500系统错误,502系统重启
$('#modal').show()
setTimeout(()=>{
$('#modal').hide()
},2000)
return Promise.reject(err)
})
//添加特殊错误处理
instance.get('/data.json').then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
})
//取消请求(了解)
let source = axios.CancelToken.source()
axios.get('data.json',{cancelToken:source.token}).then()
source.cancel('cancel http') //取消请求(message可选)
比如当用户查询数据耗时太久,用户不再查询进行了其他操作时可能用到,一般用不到。 }
}
</script>

axios实战:移动端UI的vant使用和axios的封装:

①npm i vant
②npm i ts-import-plugin -D
③按照 API文档的快速上手提示,在 babel.config.js 中配置

    module.exports = {
plugins: [
['import', {
libraryName: 'vant',
libraryDirectory: 'es',
style: true
}, 'vant']
]
};

④ 引入 Vant 组件

test.vue:
<template>
<van-button type="default">默认按钮</van-button>
</template>
<script>
import axios from 'axios'
import {Button} from 'vant'
export default {
name:'showlist',
components:{
[Button.name]=Button //局部注册,template模板中没有引用时可不写,vant官方格式。
},
created(){
axios.get(./data.json).then((res)=>{
console.log(res)
})
}
}
</script>

⑤ router.js中添加一条路由:{path:'/showlist',name:'',component:()=>import('./views/showlist.vue')}
⑥ npm run serve 启动服务测试

axios的封装 示例

①contactApi.js:

const CONTACT_API = {
//获取联系人列表
getContactList:{
method:'get',
url:'/contactList'
},
//新建联系人 form-data
newContactForm:{
method:'post',
url:'/contact/new/form-data'
},
//新建联系人 application/json
newContactJson:{
method:'post',
url:'/contact/new/json'
},
//编辑联系人
editContact:{
method:'put',
url:'/contact/edit'
},
//删除联系人
delContact:{
method:'delete',
url:'/contact'
},
}
export default CONTACT_API ②http.js: import axios from 'axios'
import service from './contactApi.js'
import {Toast} from 'vant'
//service循环遍历,输出不同的请求方法
let instance = axios.create({
baseURL:'http://localhost:9000/api',
timeout:1000
})
const Http = {}; //存放请求方法的容器
for(let key in service){
let api = service[key]; //url、method
Http[key] = async function(
params, //请求参数
isFormData = false, //标识是否是form-data请求
config={} //配置参数
){
let newParams = {}
if(params && isFormData){
newParams = new FormData()
for(let i in params){
newParams.append(i,params([i]))
}
}else{
newParams = params
}
//不同请求的判断
let response = {}; //请求的返回值
if(api.method ==='put'|| api.method ==='post'||api.method==='patch'){
try{ response = await instance[api.method](api.url,newParams,config)
}catch(err){
response = err
}
}else if(api.method ==='delete'||api.method==='get'){
config.params = newParams
try{
response = await instance
[api.method](api.url,config)
}catch(err){
response = err
}
}
return response;
}
}
//拦截器的添加
instance.interceptors.request.use(config=>{
Toast.loading({
mask:false, //是否有阴影
duration:0, //一直存在
forbidClick:true, //禁止点击
message:'加载中...'
})
return config
},err=>{
Toast.clear()
Toast('请求错误,请稍后重试')
})
//响应拦截器
instance.interceptors.response.use(res=>{
Toast.clear()
return res.data
},()=>{
Toast.clear()
Toast('请求错误,请稍后重试')
})
export default Http ③main.js文件中引入http.js,并将其挂载到vue实例上,引入后添加如下:
Vue.prototype.$http = Http;
④vue组件中使用:
<script>
import axios from 'axios'
import {Button} from 'vant'
export default {
name:'showlist',
components:{
[Button.name]=Button //局部注册,template模板中没有引用时可不写。
},
methods:{
//获取联系人列表
async getList(){
let res = await this.$http.getContact()
this.list = res.data
}
} }
</script>

axios的介绍及使用的更多相关文章

  1. axios基础介绍

    axios基础介绍 get请求要在params中定义,post要在data中定义.

  2. 学习axios必知必会(1)~axios基本介绍、axios配置、json-server接口模拟工具

    一.axios基本介绍 1.axios(前端最流行的 ajax 请求库) 特点: ① 基于 xhr + promise 的异步 ajax 请求库 ② 浏览器端/node 端都可以使用 ③ 支持请求/响 ...

  3. 3-2 axios基础介绍

    1.静态引用 <script src="https://unpkg.com/axios/dist/axios.min.js"></script> 2.npm ...

  4. axios简单介绍

    axios的配置,get,post,axiso的同步问题解决 一.缘由 vue-resoure不更新维护,vue团队建议使用axios. 二.axios安装 1.利用npm安装npm install ...

  5. axios Api介绍

    1.Performing a GET request axios.get('/user?ID=12345') .then(function (response) { // handle success ...

  6. Vuex与axios介绍

    Vuex集中式状态管理里架构 axios (Ajax) Vuex集中式状态管理架构 -简单介绍: vuex是一个专门为Vue.js设计的集中式状态管理架构. 我们把它理解为在data中需要共享给其他组 ...

  7. 介绍axios和promise

    今天小编为大家带来 axios 和promise的详细讲解,包含 axios的使用方法 多种写法,封装 以及 promise的详细讲解,项目中如何运用等,会一一的为大家讲解清楚. 一.axios的介绍 ...

  8. 4.npm模块安装和使用(axios异步请求,lodash工具库)

    建立package.json npm init 下载包 npm install axios npm install lodash 下载包,并加到package里面 npm install axios ...

  9. 使用axios实现上传视频进度条

    这是最终的效果图 先介绍一下axios的使用:中文的axios官方介绍 首先定义一个uploadTest方法,写在vue文件的methods里 该方法有三个参数,分别是参数,和两个回调函数,参数就是我 ...

随机推荐

  1. 推荐一款 MyBatis 开发神器,为简化而生!

    Java技术栈 )); MyBatis-Plus将会生成以下查询SQL: SELECT * FROM user WHERE age >= 18FROM user WHERE age >=  ...

  2. CSUST 集训队选拔赛题解

    选拔赛的题解,~~~ 题目链接:请点击 A题 素数筛 + 线段树(树状数组) 先用素数筛打表,然后线段树更新,遍历求出值,O(1)查询即可 AC代码: /*num数组 是把记录 数是否存在 存在即为1 ...

  3. js异步处理

    一.什么是异步? 我们一般喜欢把异步和同步.并行拿出来比较,我以前的理解总是很模糊,总是生硬地记着“同步就是排队执行,异步就是一起执行”,现在一看,当初简直就是傻,所以我们第一步先把这三个概念搞清楚, ...

  4. python3 获取当前路径及os.path.dirname的使用

    方法一: import sys,os os.getcwd()#然后就可以看见结果了 方法二: import os os.path.dirname(os.path.realpath('__file__' ...

  5. 数组循环移动 空间复杂度O(1)

    ---恢复内容开始--- 题目大意: 输入元素个数,输入数组,输入右移步数,输出结果: 基本思路: 可以把数组(从下标为0开始存储)看成两部分,分别是[0,n-step-1],[n-step,n-1] ...

  6. macOS添加字体

    打开macOS的Applications文件夹: 双击其中的Font Book: 把下载的字体解压后的_文件夹_ 拖进来,字体就安装好了.

  7. leetcode-162周赛-1254-统计封闭岛屿数量

    题目描述: 自己的提交: class Solution: def closedIsland(self, grid: List[List[int]]) -> int: def dfs(grid,r ...

  8. java——文件

  9. js设计模式——7.备忘录模式

    js设计模式——7.备忘录模式 /*js设计模式——备忘录模式*/ // 备忘类 class Memento { constructor(content) { this.content = conte ...

  10. docker组件如何协作(7)

    还记得我们运行的第一个容器吗?现在通过它来体会一下 Docker 各个组件是如何协作的. 容器启动过程如下: Docker 客户端执行 docker run 命令. Docker daemon 发现本 ...