【JS】1688- 重学 JavaScript API - Fetch API

news2024/11/29 6:24:28

2cc299f48246876643edfdfd57dd74ec.jpeg

前期回顾:

1. Page Visibility API

2. Broadcast Channel API

3. Beacon API

4. Resize Observer API

5. Clipboard API

🏝 1. 什么是 Fetch API

1.1 概念介绍

Fetch API[1] 是一种现代的 JavaScript API,用于进行「网络请求」。它提供了一种更简洁、灵活的方式来发送和接收数据,并取代了传统的 XMLHttpRequest[2]。Fetch API 使用 Promise 对象处理异步操作,使得处理网络请求变得更加直观和易用。

1.2 作用和使用场景

Fetch API 主要用于从服务器获取数据,发送数据到服务器或与远程 API 进行通信。它支持各种类型的网络请求,例如获取文本、JSON、XML 或二进制数据,以及发送表单数据或上传文件等。Fetch API 在现代的前端开发中被广泛使用,特别适用于构建单页应用程序、使用 RESTful API 进行数据交互、实现异步数据加载等场景。

🎨 2.如何使用 Fetch API

使用 Fetch API 非常简单和直观。下面是一个基本的使用示例,展示了如何发送一个 GET 请求并处理响应:

fetch("https://api.example.com/data")
  .then((response) => response.json())
  .then((data) => {
    // 处理获取的数据
    console.log(data);
  })
  .catch((error) => {
    // 处理请求错误
    console.error(error);
  });

上述代码中,我们使用 fetch() 函数发送了一个 GET 请求到指定的 URL,然后使用 .then() 方法处理返回的响应。在第一个 .then() 中,我们调用 response.json() 将响应转换为 JSON 格式的数据。在第二个.then() 中,我们可以访问获取到的数据,并对其进行处理。如果请求出现错误,我们可以使用 .catch() 方法来捕获并处理错误。

除了 GET 请求之外,Fetch API 还支持其他类型的请求,例如 POSTPUTDELETE 等。你可以通过设置请求的方法、头部信息和请求体来发送不同类型的请求。更多关于 Fetch API 的用法和参数设置,请参考官方文档:Fetch API - MDN Web Docs[3]

🧭 3. Fetch API 的实际应用

Fetch API 在实际应用中具有广泛的用途。下面是一些常见的实际应用场景:

3.1 数据获取和展示

通过 Fetch API 可以从服务器获取数据并在页面上展示。你可以获取 JSON、XML 或其他格式的数据,并将其呈现给用户。

fetch("https://api.example.com/data")
  .then((response) => response.json())
  .then((data) => {
    // 处理获取的数据并展示在页面上
    const container = document.getElementById("data-container");
    data.forEach((item) => {
      const element = document.createElement("p");
      element.textContent = item.name;
      container.appendChild(element);
    });
  })
  .catch((error) => {
    // 处理请求错误
    console.error(error);
  });

上述代码通过 Fetch API 从服务器获取数据,并将数据展示在页面上。假设页面中有一个 id 为 data-container 的容器元素,将获取到的数据逐项创建 <p> 元素,并添加到容器中展示。

3.2 表单提交和验证

Fetch API 可以用于将用户输入的表单数据发送到服务器进行处理。你可以使用 Fetch API 发送 POST 请求,并在服务器端进行数据验证和处理。

3.3 文件上传

使用 Fetch API,你可以发送包含文件的请求,实现文件上传的功能。这对于构建图片上传、文件存储等应用非常有用。

const fileInput = document.getElementById("file-input");
const uploadButton = document.getElementById("upload-button");

uploadButton.addEventListener("click", () => {
  const file = fileInput.files[0];
  const formData = new FormData();
  formData.append("file", file);

  fetch("https://api.example.com/upload", {
    method: "POST",
    body: formData,
  })
    .then((response) => {
      if (response.ok) {
        // 文件上传成功
        console.log("File uploaded successfully");
      } else {
        // 文件上传失败
        console.error("File upload failed");
      }
    })
    .catch((error) => {
      // 处理请求错误
      console.error(error);
    });
});

上述代码通过 Fetch API 实现了文件上传的功能。通过监听上传按钮的点击事件,获取用户选择的文件,并将文件通过 FormData 的形式发送到服务器的上传接口。请注意,上述代码中的 URL https://api.example.com/upload 和表单元素的 id file-inputupload-button 仅为示意,你需要将其替换为实际的上传接口和页面元素。

3.4 异步数据加载

Fetch API 的异步特性使其非常适合用于异步数据加载。你可以在页面加载时使用 Fetch API 请求数据,以避免阻塞页面渲染,并在数据加载完成后进行相应的处理。

// 异步加载数据
fetch("https://api.example.com/data")
  .then((response) => response.json())
  .then((data) => {
    // 处理获取的数据
    console.log(data);
  })
  .catch((error) => {
    // 处理请求错误
    console.error(error);
  });

上述代码使用 Fetch API 异步加载数据,并在获取到数据后进行相应的处理。假设服务器端返回的数据是 JSON 格式,我们通过调用 response.json() 方法将响应数据解析为 JavaScript 对象。

3.5 跨域请求

Fetch API 具有内置的跨域请求支持,因此可以轻松处理跨域请求。这在与不同域的服务器进行数据交互时非常有用。

// 发送跨域请求
fetch("https://api.example.com/data", {
  mode: "cors",
  headers: {
    "Content-Type": "application/json",
    "Access-Control-Allow-Origin": "https://example.com",
  },
})
  .then((response) => response.json())
  .then((data) => {
    // 处理获取的跨域数据
    console.log(data);
  })
  .catch((error) => {
    // 处理请求错误
    console.error(error);
  });

上述代码展示了如何发送跨域请求。在请求的参数中,我们设置了 mode: 'cors' 表示允许跨域请求,并通过设置请求头部的 'Access-Control-Allow-Origin' 字段指定了允许跨域访问的域名。需要注意的是,跨域请求的成功与否还受到服务器端的配置限制,服务器需要设置正确的响应头部以允许跨域请求。

以上仅是 Fetch API 的一些常见应用场景,实际上,它在前端开发中的应用非常广泛,涵盖了各种数据交互和网络请求的需求。

📋 4. 兼容性和优缺点

4.1 兼容性

以下是 Fetch API 在常见现代浏览器中的兼容性情况:

  • Chrome 40+ ✅

  • Firefox 39+ ✅

  • Safari 10.1+ ✅

  • Edge 14+ ✅

对于 Internet Explorer(IE),Fetch API 在 IE11 及更早版本中不受支持。

3ebc684be1527b840555a3f50fb6f528.png

详细兼容性信息,请访问 Can I use Fetch[4]

4.2 优缺点

Fetch API 带来了许多优点,但也有一些限制和缺点:优点:

  • 「简洁易用」:Fetch API 提供了简洁的语法和链式调用的方式,使得发送和处理网络请求变得更加直观和易于理解。

  • 「支持 Promise」:Fetch API 使用 Promise 对象处理异步操作,使得处理请求和响应更加灵活和便捷。

  • 「内置的跨域请求支持」:Fetch API 默认支持跨域请求,无需额外配置。

  • 「支持流数据」:Fetch API 支持处理流数据,使得处理大型数据或流式数据更加高效。

缺点:

  • 「不支持同步请求」:Fetch API 只支持异步请求,不支持同步请求。这意味着在某些特定场景下可能需要使用其他方式来处理同步请求的需求。

  • 「兼容性问题」:部分较老的浏览器不支持 Fetch API,需要考虑兼容性问题,并做相应的降级处理。

4.3 工具推荐

以下是基于 Fetch API 封装的一些第三方库:

  1. axios[5]: 100k⭐, 一个基于 Promise 的 HTTP 客户端,提供简洁易用的 API。

  2. SuperAgent[6]: 16.3k⭐, 轻量级的 Ajax 客户端库,支持链式调用和 Promise。

  3. Fetch API Polyfill[7]: 26k⭐, Fetch API 的 polyfill 库,在不支持 Fetch API 的浏览器中提供兼容性支持。

  4. isomorphic-fetch[8]: 7k⭐, 提供 Fetch API 兼容性支持的库,适用于浏览器和 Node.js 等环境。

👍 5. 使用建议和注意事项

使用 Fetch API 时,以下是一些建议和注意事项:

  1. 「异常处理」

使用 .catch() 方法来捕获请求过程中可能发生的错误,并进行适当的处理,例如显示错误信息给用户或进行备用操作。

  1. 「跨域请求」

在进行跨域请求时,确保服务器端已配置允许跨域访问的响应头信息(例如 CORS)。否则,跨域请求可能会受到限制。

  1. 「请求和响应处理」

根据需要设置请求的方法、头部信息和请求体,并在响应中使用合适的方法(如 response.json()response.text() 等)来解析和处理返回的数据。

  1. 「数据格式处理」

根据服务器返回的数据格式,使用相应的方法(如 response.json()response.text())来解析响应数据。

  1. 「兼容性考虑」

如果需要在较老的浏览器中使用 Fetch API,可以考虑使用 polyfill 或使用传统的 XMLHttpRequest 进行兼容处理。

  1. 「性能优化」

在发送请求时,可以使用请求头部信息、请求方法和缓存设置等来优化请求性能和网络资源利用。

🍭 6. 总结

Fetch API 是现代 JavaScript 中用于进行网络请求的强大工具。它提供了简洁易用的语法和 Promise 支持,使得处理网络请求变得更加直观和便捷。通过了解 Fetch API 的概念、使用方法和实际应用场景,你可以在前端开发中更加灵活地处理数据交互、异步数据加载和与服务器的通信。

🎯 7. 拓展

如果你想深入了解 Fetch API 的更多内容,可以参考以下资源:

  1. Fetch API - MDN Web Docs[9]: MDN Web Docs 提供了详细的 Fetch API 文档,包含用法示例和参数说明。

  2. Using Fetch - Google Developers[10]: Google Developers 提供了一篇关于使用 Fetch API 的详细介绍和示例。

  3. Fetch API Polyfill[11]: 如果你需要在旧版浏览器中使用 Fetch API,可以考虑使用 Fetch API 的 polyfill。

  4. Ajax vs Fetch: Which Should You Choose[12]: 这篇文章对比了传统的 Ajax 请求和 Fetch API,帮助你理解何时选择使用 Fetch API。

  5. Fetch API vs Axios: Which Should You Choose[13]: 这篇文章比较了 Fetch API 和 Axios 这两种常用的网络请求工具,帮助你选择适合你的项目的工具。

通过进一步学习和实践,你将更加熟练地运用 Fetch API,提升前端开发的能力和效率。

Reference

[1]

Fetch API: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

[2]

XMLHttpRequest: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

[3]

Fetch API - MDN Web Docs: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

[4]

Can I use Fetch: https://caniuse.com/fetch

[5]

axios: https://github.com/axios/axios

[6]

SuperAgent: https://github.com/visionmedia/superagent

[7]

Fetch API Polyfill: https://github.com/github/fetch

[8]

isomorphic-fetch: https://github.com/matthew-andrews/isomorphic-fetch

[9]

Fetch API - MDN Web Docs: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

[10]

Using Fetch - Google Developers: https://developers.google.com/web/updates/2015/03/introduction-to-fetch

[11]

Fetch API Polyfill: https://github.com/github/fetch

[12]

Ajax vs Fetch: Which Should You Choose: https://www.sitepoint.com/ajax-vs-fetch-api/

[13]

Fetch API vs Axios: Which Should You Choose: https://blog.bitsrc.io/fetch-api-vs-axios-js-for-making-http-requests-32bec2475d1b

往期回顾

#

如何使用 TypeScript 开发 React 函数式组件?

#

11 个需要避免的 React 错误用法

#

6 个 Vue3 开发必备的 VSCode 插件

#

3 款非常实用的 Node.js 版本管理工具

#

6 个你必须明白 Vue3 的 ref 和 reactive 问题

#

6 个意想不到的 JavaScript 问题

#

试着换个角度理解低代码平台设计的本质

53f565a7c9afe09c8f6c0465f36eb277.gif

回复“加群”,一起学习进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/550414.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

过滤器(filter)、watch 侦听器 、计算属性 、axios、vue-cli 的使用 、vue组件化

过滤器&#xff08;filter&#xff09;、watch 侦听器 、计算属性 、axios、vue-cli 的使用 、vue组件化 1.过滤器&#xff08;filter&#xff09;过滤器的注意点定义全局变量 2.watch 侦听器侦听器的格式 3.计算属性4.axiosaxios 的基本使用 5.vue-cli 的使用6.vue组件化 1.过…

安卓与串口通信-基础篇

前言 安卓并不仅仅只是一个手机操作系统&#xff0c;在很多领域都能见到安卓的身影。 无论是车载系统、工控系统、屏控系统还是物联网设备基本都有安卓的一席之地。 在所谓的寒冬之下&#xff0c;纯粹的安卓开发似乎已经不再吃香&#xff0c;于是越来越多的安卓开发者转向了…

浅谈新兴室内外无线局域精准定位技术UWB(超宽带)

浅谈新兴室内外无线局域精准定位技术UWB&#xff08;超宽带&#xff09; 1、UWB高精度定位系统概述2、与传统定位比较3、应用场景4、实现uwb高精度定位4、UWB室内定位的缺陷5、应用案例 1、UWB高精度定位系统概述 UWB室内定位技术是一种全新的、与传统通信技术有极大差异的通信…

【MySQL学习】事务管理

文章目录 一、事务的基本认识1.1 事务的基本概念1.2 事务的基本属性1.3 支持事务的存储引擎 二、为什么要有事务三、事务的基本操作3.1 事务的提交方式3.2 事务的操作案例 四、事务的隔离级别4.1 对事务隔离性的初步理解4.2 四种隔离级别4.3 读未提交&#xff08;Read Uncommit…

Mybatis Plus代码生成器

文章目录 1 代码生成器原理分析2 代码生成器实现步骤1:创建一个Maven项目代码2:导入对应的jar包步骤3:编写引导类步骤4:创建代码生成类步骤5:运行程序 3 MP中Service的CRUD 1 代码生成器原理分析 造句: 我们可以往空白内容进行填词造句&#xff0c;比如: 在比如: 观察我们之…

FAT NTFS Ext3文件系统有什么区别

10 年前 FAT 文件系统还是常见的格式&#xff0c;而现在 Windows 上主要是 NTFS&#xff0c;Linux 上主要是Ext3、Ext4 文件系统。关于这块知识&#xff0c;一般资料只会从支持的磁盘大小、数据保护、文件名等各种维度帮你比较&#xff0c;但是最本质的内容却被一笔带过。它们最…

SQL教程(四)简单实例学习:时间函数(一)基础入门级

目录 一、&#x1f30e;SQL 简介 1.1 &#x1f4dc;SQL 是什么&#xff1f; 1.2 &#x1f4dc;SQL 能做什么&#xff1f; 1.3 &#x1f4dc;SQL 是一种标准 - 但是... 1.4 &#x1f4dc;在您的网站中使用 SQL 1.4 &#x1f4dc;RDBMS 1.5 &#x1f4dc;请记住... 1.6 &…

物业管理可视化大屏

物业管理可视化大屏是一种可视化的智能物业管理&#xff0c;它可以将物业管理中的各种数据进行可视化展示&#xff0c;帮助物业管理人员更好地管理社区或园区。 什么是物业可视化数据大屏&#xff1f; 物业可视化数据大屏就是利用大数据技术&#xff0c;将物业管理中的各种信…

1091 Acute Stroke

One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the results of image analysis in which the core regions are identified in each MRI slice, your job is to calculate the volume of the stroke core. Input Spec…

C++中的取余函数%、remainder、fmod以及matlab中的取余函数mod

C 1 整数取余 % 2 remainder函数 https://cplusplus.com/reference/cmath/remainder/?kwremainder double remainder (double numer , double denom); float remainder (float numer , float denom); long double remainder (long double numer, long double denom); doub…

一文带你了解MySQL之单表访问方法

前言 本文章收录在MySQL性能优化原理实战专栏&#xff0c;点击此处查看更多优质内容。 本文摘录自 ▪ 小孩子4919《MySQL是怎样运行的&#xff1a;从根儿上理解MySQL》 对于我们这些MySQL的使用者来说&#xff0c;MySQL其实就是一个软件&#xff0c;平时用的最多的就是查询功…

Grow模型

Grow模型 该模型是约翰.惠特默&#xff0c;在1992年其著作《高绩效教练》一书中提出的&#xff0c;核心是围绕设定目标和寻找解决方案的有效工具。 模型介绍 GROW模型给到应用者一个可以高效的设立目标并制定计划&#xff0c;最终解决问题的思路框架。 GROW 由四个步骤构成&am…

老胡的周刊(第091期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 omnivore[2] 无干扰、注重隐私、免费开源专为…

【P26】JMeter WebSocket Sampler

文章目录 一、WebSocket Sampler 安装说明二、WebSocket Sampler 参数说明三、测试计划设计 一、WebSocket Sampler 安装说明 下载路径&#xff1a;https://jmeter-plugins.org/install/Install/ &#xff08;1&#xff09;、打开网页&#xff0c;点击 plugins-manager.jar 进…

​C++中虚函数 纯虚函数 虚基类的基础知识点​

一、前言 原文转载自 c中的 虚函数 纯虚函数 虚基类_名字全都被占用了的博客-CSDN博客&#xff0c;为了理解下C中虚函数 纯虚函数 虚基类的基础知识点。 二、虚函数 纯虚函数 虚基类三者区别 1.虚函数是用于多态中virtual修饰父类函数&#xff0c;确保父类指针调用子类对…

Maven基础学习---4、Maven的使用(IDEA)

1、创建父工程&#xff08;本人用的是IDEA2022.3&#xff09; 1、创建Project 2、配置Maven信息 如果没有提前设置过Setting for new project这个配置&#xff0c;那么每次创建Project后都需要设置Maven家目录位置&#xff0c;否则IDEA将使用内置的Maven核心程序&#xff08;…

数据仓库理论

数据仓库理论 基础理论数据仓库主要特征面相主题集成性非易失性、非易变性时变性 OLTP、OLAPOLTPOLAP对比 数据库与数据仓库的区别数据仓库、数据集市数据仓库分层架构分层思想和标准阿里巴巴数仓三层架构ODS层DW层DA层&#xff08;ADS层&#xff09; 分层的好处好处 ETL和ELT的…

mysql存储过程实例统计最大销售数量

1.需求 统计某天的销售的商品中&#xff0c;数量大于m的最大的销售数量。 传入参数&#xff1a;销售日期&#xff0c;销售数量 返回参数&#xff1a;最大销售数量 2.数据库表 销售表 CREATE TABLE t_sale ( id int NOT NULL COMMENT ‘主键’, good_id int NULL COMMENT ‘…

[山海关crypto 训练营 day17]

[HNCTF 2022 WEEK3]pnearq 题目代码和数据 from Crypto.Util.number import * from gmpy2 import next_prime from flag import flagp getPrime(1024) q next_prime(p) n p*q e 0x10001 c pow(bytes_to_long(flag), e, n) print(f"n {n}") print(f"c {…

chatgpt赋能Python-python8_9

Python 8-9: 了解更多关于Python的新特性 Python 作为一种高级编程语言已经被广泛应用于数据科学&#xff0c;Web开发&#xff0c;人工智能等领域。Python 8-9带来了新特色的更新和改进&#xff0c;这些功能使得Python更加强大和易于使用&#xff0c;吸引了越来越多开发者的关…