IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> axios 易用、简洁且高效的http库 -> 正文阅读

[JavaScript知识库]axios 易用、简洁且高效的http库

前言:在js中,我们都是通过ajax发送异步请求,而我们在异步末尾需要做一些事,比如说用响应体去渲染页面,这时就需要用到回调函数,使用promise是用来解决回调地狱的,后来的jquery把ajax进行了封装,虽然解决了兼容性问题,但是并没有解决回调地狱的问题。后来官方直接封装了fetch(XMLHttpRequest + promise)方法,可以直接使用。在vue2.0之后,很多人开始使用axios发送异步请求,axios也是基于XMLHttpRequest 和?promise进行封装的,功能比fetch更强大,强大之处就在于axios里存在拦截和并发请求。

axios的使用

? ? ? ??1.下载:通过npm下载(在项目根目录下)

? ? ? ? ? ? ? ? cnpm install axios --save

? ? ? ? 2.导入:在哪里使用axios,就需要在哪里导入

????????????????

import axios from 'axios'

? ? ? ? 3.axios发送请求的方式有5种,分别是get post delete put patch,但是根据发送请求的方式可以分为2大类,get delete一类,剩下的为一类。下面以get post 为代表?

3-1 get

import axios from 'axios'
//参数1为请求地址,参数2为配置项
axios.get('http://localhost:8080', {
    params: {
        key:'gxn759',
        id: 1
    }

}).then(res => {console.log(res)}, err => {console.log(err)})



axios.post('http://localhost:8080', {
        key:'gxn759',
        id: 1
   

}).then(res => {console.log(res)}, err => {console.log(err)})
//请求URL:http://localhost:8080/test/first

//创建axios实例
const instance = axios.create({
    baseURL: 'http://localhost:8080',
    timeout: 3000,
    //这里的token不一定全是token,就是每次请求都必须要带的一个身份标识
    token: 

})

//发送请求  方式1
instance.get('/test/first', {
    params: {
    //发送请求需要带的参数,会把参数拼接在URL上
    id: 1
    }
}).then(res => {console.log(res)}, err => {console.log(err)});

//方式2
instance ({
    method: 'get',
    url: '/test/first',
    params: {
        id: 1
    }
}).then(res => {console.log(res)}, err => {console.log(err)});

3-2 post? ? ? ? ? ?

//请求URL:http://localhost:8080/test/first

//创建axios实例
const instance = axios.create({
    baseURL: 'http://localhost:8080',
    timeout: 3000,
    //这里的token不一定全是token,就是每次请求都必须要带的一个身份标识
    token: 

})

//方式1
instance.post('/test/first', {

    id: 1
}).then(res => {console.log(res)}, err=> {console.log(err)});

//方式2
instance({
    method: 'post',
    url: '/test/first',
    data: {
        //会将参数放到请求体中
        id: 1
    }
}).then(res => {console.log(res)}, err=> {console.log(err)});

? ?4.发送并发请求

import axios form 'axios'
//创建axios实例
const instance = axios.create({
    baseURL: 'http://localhost:8080',
    timeout: 3000,
    //这里的token不一定全是token,就是每次请求都必须要带的一个身份标识
    token: 

})

axios.all([
    instance.get('/test/first', {params: {id:1}}),
    instance.post('/test/first', {id:1})
]).then(instance.spread((res1, res2) => {
    //res1, res2分别代表两次请求的结果
    console.log(res1); 
    console.log(res2)
})

)

5.请求拦截器

? ? ? ? 拦截器:在发送请求或者接受响应之前拦截

import axios form 'axios'
//创建axios实例
const instance = axios.create({
    baseURL: 'http://localhost:8080',
    timeout: 3000,
    //这里的token不一定全是token,就是每次请求都必须要带的一个身份标识
    token: 

})

//请求拦截
const i = instance.interceptors.request.use(config => {
    //config是请求信息
    //请求发送前的处理,
    
    return config;   //只有返回config,才会把请求发出去
    
}, err => {return Promise.reject(err)})
//响应拦截
instance.interceptors.response.use(res => {
    //在这里,可以对响应体做一些处理
    return res;    //这里返回的res会传到请求方法的响应对象中

}, err => {return Promise.reject(err)})

//取消拦截
instance.interceptors.request.eject(i);

6.错误处理

请求/响应拦截器出现错误时,返回的err对象会传给当前函数的err对象

那么发送请求就可以这样写

instance.get('/test/first', {
    params: {
    //发送请求需要带的参数,会把参数拼接在URL上
    id: 1
    }
})
.then(res => {console.log(res)})
.catch(err => {console.log(err)})    //拦截器返回的err对象会被传递到这里

7.取消请求

let source = instance.CancelToken.source();

instance.get('/test/first',{
				cancelToken: source
			}).then(res=>{
				console.log(res)
			}).catch(err=>{
				//取消请求后会执行该方法
				console.log(err)
			})

//取消请求,参数可选,该参数信息会发送到请求的catch中
source.cancel('取消后的信息');

8.???post请求一般分为两种类型

  • form-data 表单提交,图片上传、文件上传时用该类型比较多

  • application/json 一般是用于 ajax 异步请求

? ?form-data请求(把data参数的值写为:formData)

? ? ? ??

let data = {};    //请求参数
let formData = new FormData();
for(let key in data) {
    formData.append(key, data[key])
}
instance.post('/test/first', formData).then(res => {console.log(res)}, err=>{console.log(err)})

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章           查看所有文章
加:2021-07-16 11:11:21  更:2021-07-16 11:14:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 9:37:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码