Day25 axios

简介: 一个 ajax 请求库。

axios

概述

一个 ajax 请求库。

简介
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script>

        /*
            axios:
                前端最流行的 ajax 请求库
                react/vue 官方都推荐使用 axios 发 ajax 请求

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

                常用语法:
                    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
                        请求的默认全局配置
                    axios.interceptors.request.use()
                        添加请求拦截器
                    axios.interceptors.response.use()
                        添加响应拦截器
                    axios.create([config])
                        创建一个新的 axios(它没有下面的功能)
                    axios.Cancel():
                        于创建取消请求的错误对象
                    axios.CancelToken()
                        用于创建取消请求的 token 对象
                    axios.isCancel()
                        是否是一个取消请求的错误
                    axios.all(promises)
                        用于批量执行多个异步请求
                    axios.spread()
                        用来指定接收所有成功数据的回调函数的方法
                
        */

    </script>

</head>

<body>

</body>

</html>
使用
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script>

        /*
            axios.create(config)
        */
        //创建实例对象  /getJoke
        const duanzi = axios.create({
            baseURL: 'https://api.apiopen.top',
            timeout: 2000
        });
        const onather = axios.create({
            baseURL: 'https://b.com',
            timeout: 2000
        });
        //这里  duanzi 与 axios 对象的功能几近是一样的
        // duanzi({
        //     url: '/getJoke',
        // }).then(response => {
        //     console.log(response);
        // });
        duanzi.get('/getJoke').then(response => {
            console.log(response.data)
        })



        // 拦截器函数/ajax 请求/请求的回调函数的调用顺序
        // Promise
        // 设置请求拦截器  config 配置对象
        axios.interceptors.request.use(function (config) {
            console.log('请求拦截器 成功 - 1号');
            //修改 config 中的参数
            config.params = {
                a: 100
            };

            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.data;
            // 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({
            method: 'GET',
            url: 'http://localhost:3000/posts'
        }).then(response => {
            console.log('自定义回调处理成功的结果');
            console.log(response);
        });



        // 取消请求
        // 基本流程 
        //    配置 cancelToken 对象
        //    缓存用于取消请求的 cancel 函数
        //    在后面特定时机调用 cancel 函数取消请求
        //    在错误回调中判断如果 error 是 cancel, 做相应处理
        //    实现功能 点击按钮, 取消某个正在请求中的请求,
        //    实现功能 点击按钮, 取消某个正在请求中的请求
        //获取按钮
        const btns = document.querySelectorAll('button');
        //2.声明全局变量
        let cancel = null;
        //发送请求
        btns[0].onclick = function () {
            //检测上一次的请求是否已经完成
            if (cancel !== null) {
                //取消上一次的请求
                cancel();
            }
            axios({
                method: 'GET',
                url: 'http://localhost:3000/posts',
                //1. 添加配置对象的属性
                cancelToken: new axios.CancelToken(function (c) {
                    //3. 将 c 的值赋值给 cancel
                    cancel = c;
                })
            }).then(response => {
                console.log(response);
                //将 cancel 的值初始化
                cancel = null;
            })
        }

        //绑定第二个事件取消请求
        btns[1].onclick = function () { cancel(); }




        // 默认配置
        axios.defaults.method = 'GET';//设置默认的请求类型为 GET
        axios.defaults.baseURL = 'http://localhost:3000';//设置基础 URL
        axios.defaults.params = { id: 100 };
        axios.defaults.timeout = 3000;//

        btns[0].onclick = function () {
            axios({
                url: '/posts'
            }).then(response => {
                console.log(response);
            })
        }


    </script>

</head>

<body>

</body>

</html>
目录
相关文章
|
XML JSON 前端开发
Axios的特点
Axios的特点
83 0
|
4月前
|
JSON JavaScript 前端开发
axios浅析(一)
 axios 是一个轻量的 HTTP客户端 基于 XMLHttpRequest 服务来执行 HTTP 请求,支持丰富的配置,支持 Promise,支持浏览器端和 Node.js 端。自Vue2.0起,尤大宣布取消对 vue-resource 的官方推荐,转而推荐 axios。现在 axios 已经成为大部分 Vue 开发者的首选。
|
7月前
|
JSON 前端开发 JavaScript
axios的详细使用
axios的详细使用
187 1
|
7月前
|
XML 存储 JSON
Axios
Axios
65 0
|
7月前
|
JSON 前端开发 API
axios使用
axios使用
|
7月前
|
存储 设计模式 JSON
快速理解 Axios
快速理解 Axios
68 0
|
7月前
|
前端开发 JavaScript
Axios有哪些常用的方法?
Axios有哪些常用的方法?
80 0
axios详解
axios详解
95 0
|
JSON JavaScript 前端开发
axios的简单的使用
axios的简单的使用
66 0
|
JSON JavaScript 前端开发
axios是什么
axios是什么
170 1