Day26 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 与 Axios 的关系
        /*
            从语法上来说: axios 不是 Axios 的实例
            从功能上来说: axios 是 Axios 的实例
            axios 是 Axios.prototype.request 函数 bind()返回的函数
            axios 作为对象有 Axios 原型对象上的所有方法, 有 Axios 对象上所有属性
        */


        // instance 与 axios 的区别
        /*
            相同
                (1) 都是一个能发任意请求的函数: request(config) 
                (2) 都有发特定请求的各种方法: get()/post()/put()/delete() 
                (3) 都有默认配置和拦截器的属性: defaults/interceptors

            不同
                (1) 默认配置很可能不一样 
                (2) instance 没有 axios 后面添加的一些方法: create()/CancelToken()/all()
        */


        // axios运行的整体流程
        /*
            整体流程: 
            request(config) ==> dispatchRequest(config) ==> xhrAdapter(config)
            request(config): 将请求拦截器 / dispatchRequest() / 响应拦截器 通过 promise 链串连起来, 返回 promise
            dispatchRequest(config): 转换请求数据 ===> 调用 xhrAdapter()发请求 ===> 请求返回后转换响应数 据. 返回 promise
            xhrAdapter(config): 创建 XHR 对象, 根据 config 进行相应设置, 发送特定请求, 并接收响应数据, 返回 promise
        
        */



        // axios 的请求/响应拦截器是什么
        /*
            请求拦截器:
                在真正发送请求前执行的回调函数
                可以对请求进行检查或配置进行特定处理
                成功的回调函数, 传递的默认是 config(也必须是)
                失败的回调函数, 传递的默认是 error

            响应拦截器
                在请求得到响应后执行的回调函数
                可以对响应数据进行特定处理
                成功的回调函数, 传递的默认是 response
                失败的回调函数, 传递的默认是 error
        */



        // axios 的请求/响应数据转换器是什
        /*
            请求转换器: 
                对请求头和请求体数据进行特定处理的函数

            响应转换器: 
                将响应体 json 字符串解析为 js 对象或数组的函数
        
        */
        if (utils.isObject(data)) {
            setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
            return JSON.stringify(data);
        }

        response.data = JSON.parse(response.data)




        // response与error 的整体结构
        // response的整体结构
        {
            data, status, statusText, headers, config, request
        }
        // error 的整体结构
        {
            message, response, request
        }



        // 如何取消未完成的请求
        /*
            当配置了 cancelToken 对象时, 保存 cancel 函数
                创建一个用于将来中断请求的 cancelPromise 
                并定义了一个用于取消请求的 cancel 函数 
                将 cancel 函数传递出来
            调用 cancel()取消请求 
                执行 cacel 函数, 传入错误信息 message
                内部会让 cancelPromise 变为成功, 且成功的值为一个 Cancel 对象 
                在 cancelPromise 的成功回调中中断请求, 并让发请求的 proimse 失败, 失败的 reason 为 Cancel 对象
        */ 


    </script>

</head>

<body>

</body>

</html>
目录
相关文章
|
存储 监控 固态存储
硬盘对碎片整理的需求
【10月更文挑战第1天】硬盘对碎片整理的需求
261 4
|
存储 NoSQL BI
Redis 实战篇:巧用 Bitmap 实现亿级海量数据统计
Redis 实战篇:巧用 Bitmap 实现亿级海量数据统计
286 0
|
SQL 存储 关系型数据库
MySQL not exists 真的不走索引么
MySQL not exists 真的不走索引么
444 0
|
SQL
若依框架---角色与权限
若依框架---角色与权限
799 0
阿里巴巴发布《城市数字孪生能力平台总体技术要求》企业标准, 促进数字孪生互联互通生态建设
2023年3月21日,阿里巴巴集团举办城市数字孪生企业标准发布及研讨会,发布了《城市数字孪生能力平台总体技术要求》企业标准。
阿里巴巴发布《城市数字孪生能力平台总体技术要求》企业标准, 促进数字孪生互联互通生态建设
|
算法 网络性能优化
网络中窗口的含义及作用
【8月更文挑战第24天】
1351 0
|
数据采集 数据可视化 数据挖掘
使用Numpy进行高效的Python爬虫数据处理
使用Numpy进行高效的Python爬虫数据处理
【攻防世界】easyphp(PHP代码审计)
【攻防世界】easyphp(PHP代码审计)