h5 fetch的 原理 使用 学习总结

简介: h5 fetch的 原理 使用 学习总结
   ==================Fetch 简介 ===========================
        XMLHttpRequest 的问题
        1. 所有的功能全部集中在同一个对象上,容易书写出混乱不易维护的代码
        2. 采用传统的事件驱动模式,无法适配新的 Promise Api
        Fetch Api 的特点
        1. 并非取代 AJAX, 而是对 AJAX传统的 API
        2. 精细的功能分隔: 头部信息, 请求信息, 响应信息等均分布到不同的对象,更利于处理各种复杂的 AJAX场景
        3. 使用 Promise API, 更利于异步代码的书写
        4. Fetch Api 并非 ES6 的内容, 属于 HTML5 新增的 Web Api
        ================================Fetch 基本使用==========================
        使用 fetch() 函数即可立即向服务器发送网球请求
        参数: 该函数有两个参数
        1. 必填, 字符串, 请求地址 
          例如:
            function getProvinces() {
            const url = "http://101.132.72.36:5100/api/local";
            fetch(url)
             }
        2. 选填, 对象, 请求配置
        请求配置的对象:
        1. methods: 字符串,请求方法,默认GET
        2. headers: 对象, 请求头信息, 在request,或者respond内部转为一个Header对象
            header对象方法:
              has(key): 判断请求头里面是否存在某个配置inx
              get(key): 得到请求头里面的值
              set(key, value): 修改对应的请求头的数据
              append(key, value): 添加对应的请求头
              keys(): 获取所有请求头的key数组
              values(): 获取所有请求头的value数组
              entries(): 获取所有键值对数组
        3. body: 请求体的内容,必须匹配请求头的 Content-Type (post 请求才需要)
        4. mode: 字符串,请求模式
              cors: 默认值,配置为该值, 会在请求中加入 origin 和 referer 需要跨域
              no-cors: 配置为该值, 不会在请求中加入 origin 和 referer, 跨域的时候可能会出现问题
              same-origin: 指示请求必须在同一个域中发生,如果其他跨域,则报错
        5. credentials: 如果携带凭据(cookie) 
              omit: 默认值, 不携带cookie
              same-origin: 请求同源地址携带cookie
              include: 请求任何地址都携带cookie (cookie使用的频率越来越少)
        6. cache: 配置缓存模式     
              default: 表示fetch请求之前将检查一些HTTP的缓存
              no-store: 表示fetch请求完全忽略HTTP的缓存存在,意味着请求之前将不在检查HTTP的缓存,拿到响应后,也不会更新HTTP缓存
              no-cache: 如果存在缓存,那么fetch将发送一个条件查询request和一个正常的request, 拿到响应后, 更新HTTP缓存
              reload: 表示fetch请求之前将忽略HTTP缓存的存在,拿到求情的结果后,将主动更新HTTP缓存
              force-cache: 表示fetch请求不顾一切的依赖缓存,即使缓存过期了,它依然是从缓存中读取,除非没有缓存,那么将发送一个正常的HTTP请求
              only-if-cached: 表示fetch不顾一切一拉缓存,即使缓存过期了,它依然从缓存中货期,如果没有缓存,将抛出一个网络错误(该设置只在mode为"same-origin"时候有效)
      例如:
        function getProvinces() {
            const url = "http://101.132.72.36:5100/api/local";
            const config = {
                methods: "GET",
                headers: {
                    "Content-Type": "application/json",
                }
            }
            fetch(url, config)
        }
        fetch的返回值:
        返回的是一个promise的对象
            当服务器的返回结果后,promise进入resolve状态,状态数据为 Response对象
            当网络发送错误(或其他导致无法完成交互的错误)时, Promise 进入 rejected状态,状态数据为错误信息
        Response对象:
           ok: boolean,当响应消息码在200-299之间时候为true
           status: number 表示服务器响应的状态码
           text(): 用于处理文本格式的 Ajax响应.它从响应中获取文本流,将其读完,然后返回一个
             被解决为string对象的Promise
           blob(): 用于处理二进制文件格式(比如:图片或者电子表格)的Ajax响应.他读取文件的
              原始数据,一旦读取完整个文件,就返回一个被解决为blob对象的Promise
           json(): 用于处理JSON格式的AJAX的响应,他将JSON数据流转换成一个被解决为JavaScript对象的Promise
           redirect(): 跨域用于重定向到另一个URL. 他会创建一个新的Promise,以解决
              来自重定向的URL的响应 
           注意:
            respond对象也可以自己创建   
         Request对象:
           除了使用基本的fetch方法,还可以通过创建一个Request对象来完成请求(实际上,fetch的
            内部会自己创建一个Request对象)
            使用方法:   
            fetch(new Request("http://101.132.72.36:5100/api/local", 配置))
            注意点:
             尽量每一次使用的一个新的Request对象
            // 获取一个request对象,请求头
            function getRequest() {
                if (!req) {
                    const url = "http://101.132.72.36:5100/api/local";
                    req = new Request(url, {});
                }
                return req.clone() // 克隆一个全新的request对象
            }
相关文章
|
人工智能 测试技术 开发者
最强开源背景去除模型​RMBG v1.4
RMBG v1.4是briaai公司最先进的背景去除模型,它可以将一系列类别和图像类型中有效地将前景与背景切分
1238 0
最强开源背景去除模型​RMBG v1.4
|
Kubernetes Java Linux
Kubernetes官方java客户端之一:准备
学习K8S官方java客户端的第一篇,做好准备工作
2816 1
Kubernetes官方java客户端之一:准备
|
11月前
|
前端开发 数据处理
如何使用 Promise.all() 处理异步并发操作?
使用 `Promise.all()` 可以方便地处理多个异步并发操作,提高代码的执行效率和可读性,同时通过统一的 `.catch()` 方法能够有效地处理异步操作中的错误,确保程序的稳定性。
|
11月前
|
前端开发 应用服务中间件 定位技术
Nginx 如何代理转发传递真实 ip 地址?
【10月更文挑战第32天】
2270 5
Nginx 如何代理转发传递真实 ip 地址?
|
9月前
|
存储 人工智能 自然语言处理
《数据孤岛:AI模型训练之殇,精度与泛化的双重困境》
在人工智能快速发展的今天,数据是模型的“燃料”。然而,数据孤岛现象——即数据因系统、管理和流程原因被孤立存储,缺乏有效整合——正严重阻碍AI的发展。据调研,40%的企业存在50多个数据孤岛,这一问题导致AI模型训练精度和泛化能力下降,影响从医疗诊断到自动驾驶等多领域的应用效果。解决数据孤岛需要企业、科研人员及政府共同努力,通过统一数据标准、创新技术和完善政策,促进数据共享与融合,推动AI技术释放更大价值。
434 19
|
缓存 前端开发 JavaScript
Rails应用慢如蜗牛?揭开数据库到前端的全方位性能优化秘籍,从此告别龟速加载!
【8月更文挑战第31天】本文探讨了Ruby on Rails应用的性能优化方法,涵盖数据库查询与前端渲染。通过具体代码示例,介绍了如何使用`includes`避免N+1查询问题,利用缓存机制提高效率,以及通过合并和压缩CSS及JavaScript文件优化前端渲染。这些技巧有助于全面提升应用性能和用户体验。
169 1
|
前端开发 搜索推荐 UED
React Server Side Rendering的神奇之处:如何用SSR提升SEO与首屏加载速度,让你的项目一鸣惊人?
【8月更文挑战第31天】在现代Web开发中,React服务器端渲染(SSR)能显著提升SEO性能和首屏加载速度。通过在服务器端预渲染组件并发送HTML至客户端,SSR不仅优化了首屏加载时间,增强了用户体验,还生成了便于搜索引擎抓取的静态HTML文件,提升了页面排名。此外,SSR还具备提高安全性的优点,能够有效防范XSS攻击。虽然其开发复杂性和服务器负载是潜在劣势,但借助如Next.js等库、编写高效组件及定期维护等最佳实践,可以充分发挥SSR的优势,为未来Web开发注入更强动力。
263 0
|
SQL 关系型数据库 MySQL
MySQL数据库——视图-检查选项(cascaded、local)
MySQL数据库——视图-检查选项(cascaded、local)
601 0
|
负载均衡 Java 调度
xxl-job与其他调度框架比较与部署
xxl-job与其他调度框架比较与部署
xxl-job与其他调度框架比较与部署
|
SQL 测试技术 网络安全
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
1316 0