axios入门基础

一、初识axios

1.使用json-server的介绍与服务搭建

  1. 在线文档: https://github.com/typicode/json-server
  2. axios中文文档
  3. 下载: npm install -g json-server
  4. 目标根目录下创建数据库 json 文件: db.json
{
	"posts": [
		{ "id": 1, "title": "json-server", "author": "typicode" },
		{ "id": 2, "title": "json-server2", "author": "typicode" }
	],
	"comments": [
		{ "id": 1, "body": "some comment", "postId": 1 }
	],
	"profile": { "name": "typicode" }
}

4. 启动服务器执行命令: json-server --watch db.json

5.使用浏览器访问测试

http://localhost:3000/posts
http://localhost:3000/posts/1
http://localhost:3000/posts/2

2.使用axios 基本使用

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>axios基本使用</title>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.6.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script>
</head>
<body>
    <div class="container">
        <h2 class="page-header">基本使用</h2>
        <button class="btn btn-primary"> 发送GET请求 </button>
        <button class="btn btn-warning" > 发送POST请求 </button>
        <button class="btn btn-success"> 发送 PUT 请求 </button>
        <button class="btn btn-danger"> 发送 DELETE 请求 </button>
    </div>
    <script>
        const btn = document.querySelectorAll('button');
        //GET
        btn[0].onclick = function(){
            //发送AJAX请求
            axios({
                //请求类型
                method:'GET',
                //URL
                url:'http://localhost:3000/posts/2'
            }).then(value=>{
                console.log(value);
            })
        }

        //POST
        //发送一篇新的文章
        btn[1].onclick = function(){
            //发送AJAX请求
            axios({
                //请求类型
                method:'POST',
                //URL
                url:'http://localhost:3000/posts',
                //设置请求体
                data:{
                    title:'今天天气风和日丽',
                    author:'离歌笑',
                }
            }).then(value=>{
                console.log(value);;
            })
        }

        //更新数据
        //发送PUT请求
        btn[2].onclick = function(){
            axios({
                //请求类型
                method:'PUT',
                //Url
                url:'http://localhost:3000/posts/2',
                //设置请求体
                data:{
                    title:'三离三合',
                    author:'赵灵儿',
                }
            }).then(value=>{
                console.log(value);
            })
        }

        //DELETE 删除数据
        btn[3].onclick = function(){
            axios({
                //请求类型
                method:'delete',
                //Url
                url:'http://localhost:3000/posts/3',
                //设置请求体
            }).then(value=>{
            console.log(value);
            })
        }
    </script>
</body>
</html>

3.axios的其他使用

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>axios其他使用</title>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.6.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script>
</head>
<body>
    <div class="container">
        <h2 class="page-header">其他使用</h2>
        <button class="btn btn-primary"> 发送GET请求 </button>
        <button class="btn btn-warning" > 发送POST请求 </button>
        <button class="btn btn-success"> 发送 PUT 请求 </button>
        <button class="btn btn-danger"> 发送 DELETE 请求 </button>
    </div>
    <script>
        //获取按钮
        const btns = document.querySelectorAll('button');

        //发送GET请求
        btns[0].onclick = function(){
            //axios()
            axios.request({
                method:'GET',
                url:'http://localhost:3000/comments',
            }).then(value=>{
                console.log(value);
            })
        }

        //发送POST请求
        btns[1].onclick = function(){
            //axios()
            axios.post('http://localhost:3000/comments',{
                body:'行如止水',
                postId:2
            }).then(value=>{
                console.log(value);
            })
        }

        //更新数据
        //发送PUT请求
        btns[2].onclick = function(){
            //axios()
            axios.put('http://localhost:3000/comments/2',{
                body:'心无旁骛AS',
            }).then(value=>{
                console.log(value);
            })
        }

        //删除数据
        btns[3].onclick = function(){
            //axios
            axios.delete('http://localhost:3000/comments/3').then(value=>{})
        }
    </script>
</body>
</html>

4.axios的默认配置

axios.defualts.xxx

//获取按钮
const btns = document.querySelectorAll('button');
axios.defaults.methods ='GET';//设置默认请求的类型为GET
axios.defaults.baseURL = 'http://localhost:3000';//设置基础 URL
axios.defaults.params = {id:100};//设置参数
axios.defaults.timeout = 300;//设置时间
//默认配置
btns[0].onclick = function(){
    axios({
        url:'/post'
    }).then(resppnse=>{
        console.log(resppnse);
    })
}

二、axios 的理解和使用

1. axios 是什么?

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

2. axios 特点

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

3.axios 常用语法

axios(config): 通用/最本质的发任意类型请求的方式
axios(url[, config]): 可以只指定url 发get 请求
axios.request(config): 等同于axios(config)
axios.get(url[, config]): 发get 请求
axios.delete(url[, config]): 发delete 请求
axios.post(url[, data, config]): 发post 请求
axios.put(url[, data, config]): 发put 请求

axios.defaults.xxx: 请求的默认全局配置(method\baseURL\params\timeout…)
axios.interceptors.request.use(): 添加请求拦截器
axios.interceptors.response.use(): 添加响应拦截器

axios.create([config]): 创建一个新的axios(它没有下面的功能)

axios.Cancel(): 用于创建取消请求的错误对象
axios.CancelToken(): 用于创建取消请求的 token 对象
axios.isCancel(): 是否是一个取消请求的错误
axios.all(promises): 用于批量执行多个异步请求
axios.spread(): 用来指定接收所有成功数据的回调函数的方法

 

 4.难点语法的理解和使用

axios.create(config)

 根据指定配置创建一个新的 axios, 也就是每个新 axios 都有自己的配置
新 axios 只是没有取消请求批量发请求的方法, 其它所有语法都是一致的
为什么要设计这个语法?
(1) 需求: 项目中有部分接口需要的配置与另一部分接口需要的配置不太一样, 如何处理(比如有多个baseURL需要指定)
(2) 解决: 创建2 个新axios, 每个都有自己特有的配置, 分别应用到不同要求的接口请求中

//获取按钮 
const btns = document.querySelectorAll('button');

//创建实例对象  /getJoke
const duanzi = axios.create({
    baseURL:'https://api.apiopen.top',
    timeout:2000
})

const another= axios.create({
    baseURL:'http:/b.com',
    timeout:3000
})
//这里的duanzi与axios对象的功能几乎是一样的

duanzi({
    url:'/getJoke',
}).then(response=>{
    console.log(response);
})

duanzi.post('/getJoke').then(resopnse=>{
    console.log(resopnse);
})

5.axios拦截器

说明: 调用axios()并不是立即发送ajax 请求, 而是需要经历一个较长的流程
流程: 请求拦截器2 => 请求拦截器1 => 发ajax 请求 => 响应拦截器1 => 响应拦截器2 => 请求的回调
注意: 此流程是通过 promise 串连起来的, 请求拦截器传递的是config, 响应拦截器传递的是response

// 设置请求拦截器 config 配置对象
axios.interceptors.request.use(function (config) {
    console.log('请求拦截器成功 1号');
    //修改config中的参数
    config.params= {id:500}
    return config;
}, function (error) {
    console.log('请求拦截器失败 1号');
    return Promise.reject(error);
});

axios.interceptors.request.use(function (config) {
    console.log('请求拦截器成功 2号');
    //修改config中的参数
    config.timeout = 2000;
    return config;
}, function (error) {
    console.log('请求拦截器失败 2号');
    return Promise.reject(error);
});

// 设置响应拦截器
axios.interceptors.response.use(function (response) {
    console.log('响应拦截器成功 1号');
    // return response;
    return response;
}, function (error) {
    console.log('响应拦截器失败 1号');
    return Promise.reject(error);
});

axios.interceptors.response.use(function (response) {
    console.log('响应拦截器成功 2号');
    return response;
}, function (error) {
    console.log('响应拦截器失败 2号');
    return Promise.reject(error);
});
//发送请求
axios({
    mothods:'GET',
    url:'http://localhost:3000/posts',
    params:{id:20}
}).then(response=>{
    console.log('自定义回调成功处理');
    console.log(response);
})
.catch(reason=>{
    console.log('自定义失败回调');
})

 6.取消请求

基本流程

  1. 配置 cancelToken 对象
  2. 缓存用于取消请求的 cancel 函数
  3. 在后面特定时机调用 cancel 函数取消请求
  4. 在错误回调中判断如果 errorcancel, 做相应处理
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>取消请求</title>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.6.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script>
</head>
<body>
    <div class="container">
        <h2 class="page-header">axios取消请求</h2>
        <button class="btn btn-primary"> 发送请求 </button>
        <button class="btn btn-warning" > 取消请求 </button>
    </div>
    <script>
        //获取按钮
        const btns = document.querySelectorAll('button');
        let cancel = null;
        //发送请求
        btns[0].onclick = function(){
            //检测上一次请求是否已经完成
            if(cancel!==null)
            {
                cancel();
            }
            axios({
                methods:'get',
                url:'http://localhost:3000/posts',
                //1.添加配置对象的属性
                cancelToken:new axios.CancelToken(function(c){
                    cancel = c;
                })
            }).then(response=>{
                console.log(response);
                cancel = null;
            })
        }
        btns[1].onclick =  function(){
            cancel();
        }
    </script>   
</body>
</html>

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值