关于数据获取和 JavaScript Fetch API 的所有内容。

现代 Web 应用程序的命脉是数据。 他们依靠从各种源渠道获取信息来提供动态和交互式体验。 这就是 JavaScript Fetch API 的用处------一个强大的Tool,可以简化跨网络检索数据的方式。

发出GET请求

Fetch 是一个基于 promise 的 API。 要发出获取请求,请使用 fetch() 函数。 它需要两个参数 - 第一个参数是您要将请求发送到的 URL 端点。 第二个参数是可选的,您可以添加其他属性,例如标题、正文等。

以下是使用 fetch() 函数的示例:

javascript 复制代码
const makeReq = async () => {
    const res = await fetch('https://dummyjson.com/todos');
    const json = await res.json();
    console.log(json);
}

makeReq();

在上面的示例中,我们向 dummyjson.com/todos发出 HTTP GET 请求。 我们得到一个响应对象,其中包含我们需要的所有信息。json() 方法用于将响应对象的主体转换为 JSON。

带Headers的POST请求

默认请求类型是 GET。也可以提出其他类型的请求。 以下是 POST 请求的示例,其中包含一些自定义标头和正文。

javascript 复制代码
fetch('https://dummyjson.com/todos/add', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept-Type': 'application/json'
    },
  body: JSON.stringify({
    todo: 'example todo',
    completed: false,
    userId: 5,
  })
})

method 属性用于定义 HTTP 请求的类型。 它可以是 GETPOSTPUTPATCHDELETEOPTIONbody 包含您要发送的有效负载。 我们将对象转换为字符串,因为主体只能是stringbufferblob。 如果您发出 get 请求,则无法放置body。

headers 属性将接受所有标头。 在我们的示例中包含两个标头。 许多 api 会要求您将 api Key 或access token 放入headers中。

HTTP 状态 代码

当我们从服务器收到 HTTP 响应时,它包含一个状态代码,指示请求是否成功。 例如,状态码 404 表示您请求的资源不存在。 状态代码 422 可能意味着您尚未提供服务器所需的内容。 状态代码 401 表示您无权访问该资源。 一般来说:

  • 状态码在200-299之间表示成功。

  • 400-499之间的状态码表示客户端错误,错误来自您这边。

  • 500-599之间的状态码表示服务器端错误,来自服务器的错误。

注: 误状态代码,fetch() api 不会抛出任何错误

javascript 复制代码
const makeReq = async () => {
    const res = await fetch('https://dummyjson.com/todos');
    if (res.ok) {  // true for status codes <400
        const json = await res.json();
        console.log(json);
    }
    else {
        console.error("failed to fetch todos");
    }
}

makeReq();

取消Fetch请求

您可以使用 bortController取消获取请求。 bortController接口表示一个控制器对象,允许您在需要时中止一个或多个请求。 它有一个返回 bortSignal对象的 signal属性。 如果您在获取请求中传递此对象,则可以中止该请求。

例:

javascript 复制代码
const controller = new AbortController();

const start_download = async () =>
  await fetch("url", { signal: controller.signal });

const stop_download = async () => controller.abort();

// start download
const btn_startDownload = document.getElementById("#btn_start_download");
btn_startDownload?.onclick(() => {
  alert("starting download...");
  start_download()
    .then((data) => alert("download finished!!"))
    .catch(() => alert("can't download"));
});

// cancel download
const btn_cancelDownload = document.getElementById("#btn_cancel_download");
btn_cancelDownload?.onclick(() => {
  stop_download();
  alert("downloading stopped!!");
});

如果您运行此代码,您会注意到当您的下载被取消或请求被中止时,将显示"无法下载"消息。 原因是当请求被中止时,会抛出一个名为 AbortErrorDOMException。 如果获取请求已完成,则不会引发任何错误。

我们可以修改代码,以便在请求成功中止时不显示任何错误消息。

javascript 复制代码
const btn_startDownload = document.getElementById("#btn_start_download");
btn_startDownload?.onclick(() => {
  alert("starting download...");
  start_download()
    .then((data) => alert("download finished!!"))
    .catch((error) => {
      // no error messages when request is aborted
      if (error.name === "AbortError") return;
      alert("cancelled download!");
    });
});

这就是有关 fetch api 的全部内容,感谢您的阅读~

相关推荐
老虎06271 分钟前
JavaWeb前端(HTML,CSS具体案例)
前端·css·html
Mintopia7 分钟前
一个月速成 AI 工程师:从代码小白到智能工匠的修炼手册
前端·javascript·aigc
Mintopia10 分钟前
Next.js 全栈:接收和处理请求
前端·javascript·next.js
袁煦丞44 分钟前
2025.8.18实验室【代码跑酷指南】Jupyter Notebook程序员的魔法本:cpolar内网穿透实验室第622个成功挑战
前端·程序员·远程工作
Joker Zxc1 小时前
【前端基础】flex布局中使用`justify-content`后,最后一行的布局问题
前端·css
无奈何杨1 小时前
风控系统事件分析中心,关联关系、排行、时间分布
前端·后端
Moment1 小时前
nginx 如何配置防止慢速攻击 🤔🤔🤔
前端·后端·nginx
晓得迷路了1 小时前
栗子前端技术周刊第 94 期 - React Native 0.81、jQuery 4.0.0 RC1、Bun v1.2.20...
前端·javascript·react.js
江城开朗的豌豆1 小时前
React Native 实战心得
javascript