• [JavaScript][AJAX]axios拦截器,axios基地址,get与post区别;实现非空判断;e.preventDefault();事件委托


    目录

    axios拦截器

    axios基地址

    get与post区别

    实现非空判断

    逐个判断

    利用数组的some方法

    为什么要阻止默认事件(e.preventDefault())


    axios拦截器(interceptors)

    官方文档解释如下:

    axios官方中文文档 拦截器

    🏆1.拦截器作用:在请求与响应被then处理之前响应

    🏆2.拦截器工作流程:

    (1)进入请求拦截器

    (2)发送请求

    (3)服务器处理

    (4)进入响应拦截器

    (5)执行响应then

    🏆3.拦截器应用场景:

      (1)免登录功能

      (2)全局loading

    代码如下:

    1. // 添加请求拦截器
    2. axios.interceptors.request.use(function (config) {
    3. // 在发送请求之前做些什么
    4. return config;
    5. }, function (error) {
    6. // 对请求错误做些什么
    7. return Promise.reject(error);
    8. });
    9. // 添加响应拦截器
    10. axios.interceptors.response.use(function (response) {
    11. // 2xx 范围内的状态码都会触发该函数。
    12. // 对响应数据做点什么
    13. return response;
    14. }, function (error) {
    15. // 超出 2xx 范围的状态码都会触发该函数。
    16. // 对响应错误做点什么
    17. return Promise.reject(error);
    18. });

    拦截器流程

    axios拦截器实现loading效果:

    我在代码中标记了"💎"的地方是我增加的部分,

    css和html中已经写好了一个类名为"loading-box"的盒子为加载效果,

    于是我在请求拦截器的返回config之前,增加使盒子显示的代码,

    在响应拦截器的返回response之前,增加使盒子消失的代码

    1. // 添加请求拦截器
    2. axios.interceptors.request.use(function (config) {
    3. // 💎显示loading效果
    4. document.querySelector('.loading-box').style.display = 'block'
    5. // 在发送请求之前做些什么
    6. return config;//把请求的配置发送给服务器
    7. }, function (error) {
    8. // 对请求错误做些什么
    9. return Promise.reject(error);//返回错误
    10. });
    11. // 添加响应拦截器
    12. axios.interceptors.response.use(function (response) {
    13. //💎隐藏loading效果
    14. document.querySelector('.loading-box').style.display = 'none'
    15. // 2xx 范围内的状态码都会触发该函数。
    16. // 对响应数据做点什么
    17. return response;//把响应数据给then方法的res
    18. }, function (error) {
    19. // 超出 2xx 范围的状态码都会触发该函数。
    20. // 对响应错误做点什么
    21. return Promise.reject(error);
    22. });

    axios基地址

    🏆全局设置axios基地址

        (1)如果axios自己写了基地址,优先用axios自己写的

        (2)如果axios没有写基地址,就会用baeURL

    语法如下:

    axios.defaults.baseURL = '基地址'

    axios.defaults.baseURL = 'http://ajax-base-api-t.itheima.net'

    get与post区别

    🏆get与post区别(掌握)

    - 1.传参方式不同

      - get在url后面拼接(请求行)

      - post在请求体传参

    - 2.大小限制不同

      - get有大小限制,不同浏览器大小限制不同。 一般2-5 MB

      - post没有大小限制

    - 3.安全性不同

      - get参数直接暴露在url,不安全(一般查询类数据都是get)

      - post参数在请求体中,更加安全(一般登录注册必须是post)

    - 4.传输速度不同

      - get传输速度快

      - post传输速度慢

    • 区别之间的联系:
    • 正是由于传参方式不同导致了安全性不同
    • 正是由于大小限制不同导致了传输速度不同

    🏆  其他请求方法

            | 请求方式 | 描述                       | 特点            |

            | -------- | -------------------------- | --------------- |

            | post     | 一般用于新增数据(提交数据) | 请求体传参      |

            | get      | 一般用于查询数据(查询数据) | 请求行(url)传参 |

            | delete   | 一般用于删除数据           | 请求体传参      |

            | put      | 一般用于更新全部数据       | 请求体传参      |

            | patch    | 一般用于更新局部数据       | 请求体传参      |

    • put和pacth区别

    全局更新 : put

    局部更新:  patch

    实现非空判断

    非空判断:获取用户输入的数据,然后判断数据是否为空

    作用:减小服务器的压力, 空的数据不去传输,只传输有内容的数据,减小了服务器压力,

    逐个判断

    如果数据较少时,我们可以用单独判断,或者用逻辑或判断是否为空

    单独判断:

          if (!bookname) {

            return alert('请输入完整信息!!!!!!!!')

          }

    几个数据用逻辑或判断

          if (!bookname || !author || !publisher) {

            return alert('请输入完整信息!!!!!!!!')

          }

    利用数组的some方法

    💎但是当一个如果我们做了一个有几十个乃至上百个数据非空判断时,

    逐个判断非空就效率过低了

    💎此时我们可以把我们得到数据全部push进一个数组data,

    利用数组的some方法实现非空判断,逻辑类似于逻辑或判断

    MDN 官方详解 MDN 数组some方法

    some() 方法测试数组中是不是至少有 1 个元素通过了被提供的函数测试。它返回的是一个 Boolean 类型的值。

    代码如下:

    data是存入需要判断的数据的数组

    if(data.some(item => item === '')) return alert('请输入完整数据')

    为什么要阻止默认事件(e.preventDefault())

    拥有默认事件的对象:

    1.html的a标签点击自动跳转

    2.button(type=submit)按钮的提交行为,

    3.input输入框默认的点击获取焦点等

    有的时候我们不想要触发执行默认事件,

    需要阻止元素的默认事件:e.preventDefault()

    举个例子;

    button(type=submit)按钮的提交行为,如果我们不阻止的话,

    我们一点击网页就会自动跳转,并且表单内容清空,这样我们就,无法获取表单内容来,进行数组传输

    所以需要阻止默认事件

    1. document.querySelector('button[type="submit"]')
    2. .addEventListener('click', function (e) {
    3. // 阻止传输数据默认事件,
    4. e.preventDefault()
    5. }

     

  • 相关阅读:
    设计模式(七)桥接
    Ajax交互扩展
    6.Request和Response
    安装Android SDK点击SDK Manager.exe一闪而退完美解决方案
    cf F. Kazaee(离散化随机hashing+树状数组)
    网络安全(黑客技术)自学规划
    Linux安装软件通用办法总结及注意事项(全局运行、守护进程、自启动,开放服务端口)
    `AllocConsole` 函数 通过控制台实时看printf日志
    第四章·工厂方法模式
    2023年亚太杯数学建模思路 - 复盘:校园消费行为分析
  • 原文地址:https://blog.csdn.net/wusandaofwy/article/details/126561607