Skip to content
📈0️⃣

Fetch API

Fetch API 是用于在浏览器中发送网络请求的现代 API,它提供了一种更简洁、灵活和强大的方式来处理 HTTP 请求和响应。Fetch API 基于 Promise,支持现代的异步编程模式,取代了传统的 XMLHttpRequest API,在现代 Web 开发中被广泛应用。

Fetch API

Fetch 参数

Fetch API 包括以下主要组件和概念:

  1. fetch() 函数: fetch() 函数是 Fetch API 的核心,用于发送网络请求。它接收一个 URL 参数,以及可选的配置对象,返回一个 Promise 对象,可以使用 .then() 方法处理响应数据。

  2. Response 对象: Response 对象表示从服务器返回的响应,包含响应的状态、头部信息、内容等。开发者可以通过 Response 对象提取响应数据,并进行相应处理。

  3. Request 对象: Request 对象表示待发送的请求,包含请求的 URL、请求头、请求方法等信息。可以通过自定义 Request 对象来设置请求的各种参数。

  4. Promise: Fetch API 基于 Promise 对象,支持异步操作,可以通过 .then() 方法链式处理请求和响应,处理成功和失败的回调函数。

  5. Headers 对象: Headers 对象用于表示请求或响应的头部信息,开发者可以通过 Headers 对象添加、获取、删除头部信息。

  6. CORS(跨域资源共享)支持: Fetch API 提供了内置的跨域资源共享支持,可以方便地发送跨域请求,并在响应中处理访问控制与安全性。

  7. fetch 事件: Fetch API 允许对请求和响应执行各种操作,开发者可以监听 fetch 事件,并在其中做一些自定义的处理。

Fetch 优点

Fetch API 具有以下优点:

  1. 更简洁:Fetch API 使用 Promise 和简洁的方法调用,代码更易读、易维护。

  2. 更灵活:Fetch API 提供了更多定制化的选项,如配置请求、处理响应等,满足不同场景下的需求。

  3. 支持跨域资源共享:Fetch API 提供了对 CORS 的原生支持,可以轻松处理跨域请求。

在现代 Web 开发中,推荐使用 Fetch API 来替代传统的 XMLHttpRequest API,以获得更好的性能、更好的可读性和更好的可维护性。Fetch API 已成为 Web 开发的主流网络请求工具,广泛应用于前端开发和移动应用开发中。

Fetch 实战

GET 请求

使用 Fetch API 发送 GET 请求的代码示例如下:

GET - 简版

js
fetch("https://zichin.com/blogapi/pageviews")
  .then((res) => res.json())
  .then((data) => console.log("result -->", data))
  .catch((error) => console.error("error -->", error));

GET - 标准版

js
const baseUrl = location.host.includes("localhost")
  ? "http://localhost:5173"
  : "https://zichin.com";
const prefix = "/blogapi";
const url = baseUrl + prefix + "/pageviews";
fetch(url, {
  method: "GET",
  headers: {
    "Content-Type": "application/json;charset=utf-8",
  },
})
  .then((res) => res.json())
  .then((data) => console.log("result -->", data))
  .catch((error) => console.error("error -->", error));

GET 请求(url)

使用 Fetch API 发送带参数的 GET 请求的代码示例如下:

请求参数 - queryStr

js
fetch("https://zichin.com/blogapi/pageviews?page=1&size=5")
  .then((res) => res.json())
  .then((data) => console.log("result -->", data))
  .catch((error) => console.error("error -->", error));

请求参数 - queryStr

js
const getList = (params) => {
  const baseUrl = location.host.includes("localhost")
    ? "http://localhost:5173"
    : "https://zichin.com";
  const prefix = "/blogapi";
  const params = new URLSearchParams(params);
  const _url = baseUrl + prefix + url + "?" + params;
  return fetch("https://api.example.com/data", {
    method: "GET",
    headers: {
      "Content-Type": "application/json",
    },
  }).then((response) => response.json());
};

POST 请求

使用 Fetch API 发送 POST 请求的代码示例如下:

js
fetch("https://api.example.com/data", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ name: "John", age: 30 }),
})
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error(error));

POST 请求(FormData)

使用 Fetch API 发送带参数的 POST 请求(使用 FormData)的代码示例如下:

js
const formData = new FormData();
formData.append("name", "John");
formData.append("age", "30");

fetch("https://api.example.com/data", {
  method: "POST",
  body: formData,
})`
`
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error(error));

POST 请求(Blob)

使用 Fetch API 发送带参数的 POST 请求(使用 Blob)的代码示例如下:

js
const data = new Blob(["Hello, World!"], { type: "text/plain" });

fetch("https://api.example.com/data", {
  method: "POST",
  body: data,
})`
`
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error(error));

POST 请求(ArrayBuffer)

使用 Fetch API 发送带参数的 POST 请求(使用 ArrayBuffer)的代码示例如下:

js
const arrayBuffer = new ArrayBuffer(8);
const dataView = new DataView(arrayBuffer);
dataView.setInt32(0, 42);

fetch("https://api.example.com/data", {
  method: "POST",
  body: arrayBuffer,
})`
`

  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error(error));

POST 请求(ArrayBufferView)

使用 Fetch API 发送带参数的 POST 请求(使用 ArrayBufferView)的代码示例如下:

js
const arrayBufferView = new Uint8Array([1, 2, 3, 4, 5]);

fetch("https://api.example.com/data", {
  method: "POST",
  body: arrayBufferView,
})`
`
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error(error));

案例测试

GET 请求


请求数据: {}
返回数据: {}