JS Fetch: 一站式网络请求利器

在前端开发中,一次网络请求是无法避免的,而JS Fetch作为一种新型的网络请求API,其能够帮助开发者更加简洁、高效地完成数据请求,取代了原有的XMLHttpRequest(XHR)对象。

一、JS Fetch是什么?

JS Fetch是一个现代化的API,用于代表HTTP请求的响应,并且支持Promise API(解决了XHR对象存在的异步问题)。JS Fetch使从网络获取资源变得非常容易,可以使用XMLHttpRequest对象替代传统XHR对象,也可以通过其它 HTTP请求的工具库进行替代。

fetch('http://example.com/movies.json')
  .then(response => response.json())
  .then(data => console.log(data));

fetch函数用于发起请求,它返回一个Promise对象,其中Promise的resolve方法返回一个Response对象,该对象表示与服务器响应相关的信息。Response对象的body属性包含通过fetch请求获取到的BodyStream,而且可以通过使用各种解析器来解析文本数据。

二、JS Fetch的MDN文档

MDN的JS Fetch文档是学习使用JS Fetch时的最好指南之一。通过访问MDN文档,可以得到JS Fetch的基础知识及使用方式。

// 获取请求
fetch('http://example.com/movies.json')
  .then(function(response) {
    return response.json();
  })
  .then(function(myJson) {
    console.log(JSON.stringify(myJson));
  });

文档中的这个例子展示了如何使用JS Fetch API从服务器获取JSON数据,而后使用console.log方法将数据打印到控制台中。其中的then方法链用于处理来自fetch函数的响应结果,并且返回一个Promise对象。

三、JS Fetch的API

fetch函数可接受多个参数,其中最重要的一个是URL参数,用于指定要获取资源的URL字符串。除此之外,JS Fetch还支持一系列内置API,例如:

  • response.headers:包含响应标头的“只读”属性。
  • response.ok:表示服务器是否成功响应,其值为布尔类型。
  • response.status:响应状态码,它会根据错误代码返回响应。这个值在从服务器获取响应的时候非常常用,可用于判断服务器响应情况。
  • response.statusText:响应状态类型的描述文本。
fetch('http://example.com/movies.json')
  .then(response => {
    console.log(response.headers.get('Content-Type'));
  });

上述代码中,使用fetch获取资源后,获取响应的Content-Type,content-type是HTTP标头,指示在得到服务器响应的情况下接收的实体的媒体类型。

四、JS Fetch的await用法

JS Fetch支持ES7的Async/Await语法,把Promise代码变成更容易可读的同步代码。我们可以在运行fetch时等待结果:

async function getUsername() {
  try {
    const response = await fetch('/api/user');
    const user = await response.json();
    return user.name;
  } catch (error) {
    console.error('获取信息失败', error);
  }
}

这里是一个使用async/await获取用户信息的示例。当fetch请求成功后,它将返回一个响应对象,返回的结果将是可以调用JSON()函数的BodyStream对象的异步解析。接下来,我们可以使用用户的名字返回结果。

五、JS Fetch的POST请求

在HTTP中,POST请求是一种方法,HTTP客户端用该方法向服务器发送数据。同样地,JS Fetch可以用于发送POST请求,代码如下:

fetch('/users', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    user: 'john-doe'
  })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error))

在上述代码中,我们可以看到fetch的第二个参数包含HTTP方法(这里是’POST’)和用于发送与请求一起发送的数据体的附加信息。”headers”选项允许我们发送JSON响应,而”body”选项是POST请求中的数据负载。

六、JS Fetch函数

JS Fetch带有内置方法,其中包括对通过fetch请求获取文本内容(text)、JSON数据(json)以及ArrayBuffer对象等的处理方法。比如,我们可以使用如下代码来解析来自fetch请求的文本响应:

fetch('/example.txt')
  .then(response => response.text())
  .then(data => console.log(data))
  .catch(error => console.log(error));

这里,我们使用text()方法来解析来自fetch请求的文本响应。取决于响应,text()方法会返回文本字符串。

七、JS Fetch跨域问题

JS Fetch默认会遵循‘同域数据源’限制,以限制由于跨站点资源获取而导致的数据泄露风险。但是,如果需要,我们也可以以跨域方式使用JS Fetch。

以下是一些例子:

fetch('https://api.example.com/data')
  .then((response) => {
    console.log(response);
  })
  .catch((error) => {
    console.error(error);
  });

上述例子中,我们使用了https://api.example.com上的API endpoint作为数据源。由于这是一个不同的域名,fetch请求将被阻止,因为它违反了“同源策略”。

如果我们尝试在此情况下进行跨域请求,则需要向请求头中添加credentials属性:

fetch('https://api.example.com/data', {
  credentials: 'include'
})
  .then((response) => {
    console.log(response);
  })
  .catch((error) => {
    console.error(error);
  });

设置了credentials之后,fetch请求将可成功跨域。

八、JS Fetch Stream

JS Fetch Stream允许我们像流式传输一些数据一样逐步接收数据。下面是fetch().body实现HTTP/2流传输的示例:

const res = await fetch('/stream');
const reader = res.body.getReader();

if (res.body === null) return;

while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  console.log(value);
}

上述代码中的fetch()函数会返回一个Response对象,其中response.body是一个可读的流。然后,我们为流创建一个reader对象,reader对象允许我们从可读流中读取数据。

九、JS Fetch Headers

Headers对象是与请求和响应头部相关的相邻信息,该对象包含所有HTTP报头(也可以说成META数据)的集合。我们可以使用Headers对象来检查fetch请求和响应的HTTP标头:

fetch('/data')
  .then(response => {
    const headers = response.headers;
    console.log(headers);
  })
  .catch(console.error);

上述代码中,我们使用了Headers对象来检查来自fetch请求的响应头。由于headers对象包含HTTP报头的集合,因此我们可以轻松地得到服务器响应的HTTP响应头信息。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/280559.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-21 13:05
下一篇 2024-12-21 13:15

相关推荐

  • JS Proxy(array)用法介绍

    JS Proxy(array)可以说是ES6中非常重要的一个特性,它可以代理一个数组,监听数据变化并进行拦截、处理。在实际开发中,使用Proxy(array)可以方便地实现数据的监…

    编程 2025-04-29
  • Python刷课:优化学习体验的利器

    Python刷课作为一种利用自动化技术优化学习体验的工具已经被广泛应用。它可以帮助用户自动登录、自动答题等,让用户在学习过程中可以更加专注于知识本身,提高效率,增加学习乐趣。 一、…

    编程 2025-04-29
  • lsw2u1:全能编程开发工程师的利器

    lsw2u1是一款多功能工具,可以为全能编程开发工程师提供便利的支持。本文将从多个方面对lsw2u1做详细阐述,并给出对应代码示例。 一、快速存取代码段 在日常开发中,我们总会使用…

    编程 2025-04-29
  • 使用Netzob进行网络协议分析

    Netzob是一款开源的网络协议分析工具。它提供了一套完整的协议分析框架,可以支持多种数据格式的解析和可视化,方便用户对协议数据进行分析和定制。本文将从多个方面对Netzob进行详…

    编程 2025-04-29
  • 解析js base64并转成unit

    本文将从多个方面详细介绍js中如何解析base64编码并转成unit格式。 一、base64编码解析 在JavaScript中解析base64编码可以使用atob()函数,它会将b…

    编程 2025-04-29
  • Node.js使用Body-Parser处理HTTP POST请求时,特殊字符无法返回的解决方法

    本文将解决Node.js使用Body-Parser处理HTTP POST请求时,特殊字符无法返回的问题。同时,给出一些相关示例代码,以帮助读者更好的理解并处理这个问题。 一、问题解…

    编程 2025-04-29
  • Qttus:一站式的物联网解决方案

    Qttus 是一个全面的物联网(IoT)解决方案,用于连接传感器、设备和云。它可以帮助您在现有商业和制造业应用程序中轻松地添加 IoT 功能,同时提供可伸缩且安全的数据传输和存储。…

    编程 2025-04-29
  • 微软发布的网络操作系统

    微软发布的网络操作系统指的是Windows Server操作系统及其相关产品,它们被广泛应用于企业级云计算、数据库管理、虚拟化、网络安全等领域。下面将从多个方面对微软发布的网络操作…

    编程 2025-04-28
  • t3.js:一个全能的JavaScript动态文本替换工具

    t3.js是一个非常流行的JavaScript动态文本替换工具,它是一个轻量级库,能够很容易地实现文本内容的递增、递减、替换、切换以及其他各种操作。在本文中,我们将从多个方面探讨t…

    编程 2025-04-28
  • 蒋介石的人际网络

    本文将从多个方面对蒋介石的人际网络进行详细阐述,包括其对政治局势的影响、与他人的关系、以及其在历史上的地位。 一、蒋介石的政治影响 蒋介石是中国现代历史上最具有政治影响力的人物之一…

    编程 2025-04-28

发表回复

登录后才能评论