Fetch API 是 JavaScript 中基於承諾的現代接口,用於發出 HTTP 請求。它簡化了從伺服器取得資源的過程,取代了 XMLHttpRequest 等舊方法。 Fetch 提供了一種更清晰、更易讀的方法來處理網路請求和回應,支援 Promises、串流和非同步/等待等功能。
fetch(url, options) .then(response => { // Handle the response }) .catch(error => { // Handle errors });
取得預設為 GET 方法。
範例:
fetch("https://jsonplaceholder.typicode.com/posts") .then(response => { if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } return response.json(); }) .then(data => console.log("Data:", data)) .catch(error => console.error("Error:", error));
要將資料傳送到伺服器,請使用具有選項物件中的 body 屬性的 POST 方法。
範例:
fetch("https://jsonplaceholder.typicode.com/posts", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ title: "foo", body: "bar", userId: 1, }), }) .then(response => response.json()) .then(data => console.log("Response:", data)) .catch(error => console.error("Error:", error));
fetch 函數接受一個選項物件來設定請求:
Option | Description |
---|---|
method | HTTP method (e.g., GET, POST, PUT, DELETE). |
headers | Object containing request headers. |
body | Data to send with the request (e.g., JSON, form data). |
credentials | Controls whether cookies are sent with the request (include, same-origin). |
6.處理回應
Method | Description |
---|---|
response.text() | Returns response as plain text. |
response.json() | Parses the response as JSON. |
response.blob() | Returns response as a binary Blob. |
response.arrayBuffer() | Provides response as an ArrayBuffer. |
範例:取得 JSON
fetch(url, options) .then(response => { // Handle the response }) .catch(error => { // Handle errors });
Async/await 簡化了 Fetch 中 Promise 的處理。
範例:
fetch("https://jsonplaceholder.typicode.com/posts") .then(response => { if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } return response.json(); }) .then(data => console.log("Data:", data)) .catch(error => console.error("Error:", error));
與 XMLHttpRequest 不同,Fetch 不會因為 HTTP 錯誤而拒絕 Promise。您必須檢查回應的 ok 屬性或狀態代碼。
範例:
fetch("https://jsonplaceholder.typicode.com/posts", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ title: "foo", body: "bar", userId: 1, }), }) .then(response => response.json()) .then(data => console.log("Response:", data)) .catch(error => console.error("Error:", error));
Fetch 本身不支援請求逾時。您可以使用 Promise.race() 實作逾時。
範例:
fetch("https://api.example.com/data") .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error("Error:", error));
Feature | Fetch API | XMLHttpRequest |
---|---|---|
Syntax | Promise-based, simpler, cleaner. | Callback-based, verbose. |
Error Handling | Requires manual handling of HTTP errors. | Built-in HTTP error handling. |
Streaming | Supports streaming responses. | Limited streaming capabilities. |
Modern Features | Works with Promises, async/await. | No built-in Promise support. |
Fetch 是現代 Web 開發專案的理想選擇。
它與 Promises 和 async/await 無縫整合。
當您需要更乾淨且更易於維護的程式碼時使用它。
以上是掌握 Fetch API:在 JavaScript 中簡化 HTTP 請求的詳細內容。更多資訊請關注PHP中文網其他相關文章!