淺談Fetch API

什么是Fetch API

Fetch API 是一種現代的 JavaScript API,用于進行網絡請求和處理響應數據。它提供了一種更簡單和更靈活的方式來執行網絡請求,取代了傳統的 XMLHttpRequest(XHR)。

Fetch API 具有以下特點:

  1. Promise 風格的 API: Fetch API 使用 Promise 對象進行異步操作的處理。這使得處理異步操作變得更加直觀和易于管理。

  2. 更清晰的語法: Fetch API 的語法更加清晰和簡潔,可以通過鏈式調用來定義請求的各個參數。

  3. 支持請求和響應對象: Fetch API 允許您創建請求對象并設置請求頭、請求方法、請求體等參數。同時,它也提供了處理響應的功能,可以獲取響應頭、響應狀態等信息。

  4. 內置 JSON 解析: 在 Fetch API 中,處理 JSON 數據更加方便。默認情況下,響應數據會被自動解析為 JSON 對象。

  5. 跨域請求支持: 與 XMLHttpRequest 一樣,Fetch API 也可以用于進行跨域請求。但是要注意,默認情況下,瀏覽器不會發送跨域請求的身份驗證憑據(如 Cookie)。

以下是使用 Fetch API 進行 GET 請求的示例:

fetch('https://api.example.com/data').then(response => {if (!response.ok) {throw new Error('Network response was not ok');}return response.json(); // 解析為 JSON 對象}).then(data => {console.log(data); // 處理響應數據}).catch(error => {console.error('Fetch Error:', error);});

以上代碼中,fetch 函數發送了一個 GET 請求到指定的 URL,然后使用 Promise 的鏈式調用處理響應數據。在 then 方法中,您可以根據需要進行響應數據的解析和處理,同時使用 catch 方法來捕獲請求和解析過程中的錯誤。

需要注意的是,Fetch API 在某些方面與傳統的 XMLHttpRequest 有所不同,例如錯誤處理和請求的默認設置。在實際使用中,您可以根據具體需求選擇適合的網絡請求工具。

Fetch API 的主要 API

Fetch API 提供了一組用于進行網絡請求和處理響應的方法和屬性。以下是一些 Fetch API 的主要 API:

  1. fetch() 方法:
    • 用于發送網絡請求并返回一個 Promise 對象,該 Promise 在請求完成后會解析為 Response 對象。
fetch(url, options);
  1. Response 對象:

    • 表示一個 HTTP 響應,它包含響應頭、響應狀態、響應數據等信息。
  2. Request 對象:

    • 表示一個 HTTP 請求,可以用于自定義請求頭、請求方法等。
  3. Headers 對象:

    • 用于操作和管理請求和響應的頭部信息。
  4. RequestInit 參數對象:

    • fetch() 方法中,可以通過這個對象設置請求的各種選項,如請求方法、請求頭、請求體等。
  5. Body 對象:

    • 用于操作請求和響應的數據體(請求體和響應體),可以通過 .json().text() 等方法解析響應數據。
  6. Response 方法和屬性:

    • .json():返回一個 Promise,解析響應數據為 JSON 對象。
    • .text():返回一個 Promise,解析響應數據為文本字符串。
    • .blob():返回一個 Promise,解析響應數據為二進制 Blob 對象。
    • .arrayBuffer():返回一個 Promise,解析響應數據為 ArrayBuffer 對象。
    • .ok:一個只讀屬性,表示響應是否成功。
    • .status:一個只讀屬性,表示響應的狀態碼。
  7. CORS 相關選項:

    • mode:設置請求模式,如 "cors"(跨域請求)、"same-origin"(同源請求)、"no-cors"(不允許跨域請求)。
    • credentials:設置請求是否攜帶跨域請求的憑據,如 "include""same-origin""omit"
  8. AbortController 和 AbortSignal:

    • 用于實現請求的取消功能,通過 AbortController 可以創建一個控制器,然后將其與請求關聯,通過 AbortSignal 可以監聽請求的取消事件。

這些是 Fetch API 中的一些核心方法、對象和屬性。

與axios區別

fetchaxios 都是 JavaScript 中用于進行網絡請求的工具,但它們有一些不同之處。以下是它們之間的一些主要區別:

  1. API 風格:

    • fetch 是瀏覽器內置的原生 API,用于進行網絡請求。它返回 Promise 對象,采用 Promise 風格的異步編程。
    • axios 是一個基于 Promise 的第三方庫,提供了更高級的 API,可以在瀏覽器和 Node.js 環境中使用。
  2. 全局性:

    • fetch 是瀏覽器的全局對象,可直接在瀏覽器環境中使用。
    • axios 需要通過導入庫后使用,可以在瀏覽器和 Node.js 環境中使用。
  3. 語法和配置:

    • fetch 使用基于方法的鏈式調用,如 .then(),并提供了一組參數來配置請求。
    • axios 使用更直觀的 API,使用 .then()async/await 來處理異步,提供了更豐富的配置選項。
  4. 請求和響應處理:

    • fetch 需要使用 .json() 方法來解析 JSON 響應數據,不同類型的響應需要不同的解析方式。
    • axios 會自動解析 JSON 響應數據,并提供了可以直接獲取響應數據的 API。
  5. 錯誤處理:

    • fetch 在響應狀態碼不為 200 時也會返回成功的 Promise,需要手動檢查響應的 ok 屬性或使用 .catch() 來處理錯誤。
    • axios 會自動根據狀態碼來判斷響應是成功還是失敗,可以通過 .catch() 來處理錯誤。
  6. 取消請求:

    • fetch 本身不提供直接的請求取消功能,需要使用 AbortController 來實現。
    • axios 提供了內置的請求取消功能,可以方便地取消正在進行的請求。
  7. 瀏覽器兼容性:

    • fetch 是現代瀏覽器的標準特性,較舊的瀏覽器可能需要使用 polyfill。
    • axios 對于不支持 Promise 的環境需要提供額外的 polyfill。

選擇使用 fetch 還是 axios 取決于您的具體需求和項目環境。fetch 是現代瀏覽器內置的 API,適用于基本的網絡請求,而 axios 提供了更豐富的功能和更友好的 API,適用于更復雜的網絡請求場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43375.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43375.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43375.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

概述、搭建Redis服務器、部署LNP+Redis、創建Redis集群、連接集群、集群工作原理

Top NSD DBA DAY09 案例1:搭建redis服務器案例2:常用命令限案例3:部署LNPRedis案例4:創建redis集群 1 案例1:搭建redis服務器 1.1 具體要求如下 在主機redis64運行redis服務修改服務運行參數 ip 地址192.168.88.6…

【問題整理】Ubuntu 執行 apt-get install xxx 報錯

Ubuntu 執行 apt-get install xxx 報錯 一、問題描述: 執行apt-get install fcitx時,報如下錯誤 grub-pc E: Sub-process /usr/bin/dpkg returned an error code (1)二、解決方法: 嘗試修復依賴問題: sudo apt-get -f install這個命令會嘗試修復系統…

Elasticsearch:如何在 Ubuntu 上安裝多個節點的 Elasticsearch 集群 - 8.x

Elasticsearch 是一個強大且可擴展的搜索和分析引擎,可用于索引和搜索大量數據。 Elasticsearch 通常用于集群環境中,以提高性能、提供高可用性并實現數據冗余。 在本文中,我們將討論如何在 Ubuntu 20.04 上安裝和配置具有多節點集群的 Elast…

關于Linux Docker springboot jar 日志時間不正確 問題解決

使用Springboot項目的jar,制作了一個Docker鏡像,啟動該鏡像后發現容器和容器中的Springboot 項目的日志時間不正確。 解決 查看容器時間命令為: docker exec 容器id date 1. 容器與宿主機同步時間 在啟動鏡像時候把操作系統的時間通過&q…

SpringBoot創建和使用

spring core的方式來寫代碼還是比較繁瑣的,而spring boot就是幫助程序員使用spring開發的一個腳手架(boot),它是一個用于構建Java應用程序的開源框架,旨在簡化開發流程并提高生產效率。它的主要優點有: 快速…

CSS簡介

目錄 CSS CSS概念 核心概念 為什么需要CSS 語法 CSS的引入方式 內聯樣式(行內樣式) 內部樣式 外部樣式(推薦) CSS CSS概念 CSS(Cascading Style Sheets)層疊樣式表,又叫級聯樣式表&am…

【Vue-Router】導航守衛

前置守衛 main.ts import { createApp } from vue import App from ./App.vue import {router} from ./router // import 引入 import ElementPlus from element-plus import element-plus/dist/index.css const app createApp(App) app.use(router) // use 注入 ElementPlu…

ShowMeBug CEO李亞飛受邀參加深圳青年創新創業系列沙龍電子信息專場

7月13日下午,由深圳市科技交流服務中心(深圳市科技專家委員會辦公室)主辦,深圳新一代產業園承辦的“2023深圳青年創新創業系列沙龍——電子信息專場”活動舉行。ShowMeBug CEO李亞飛受邀參加此次活動。 深圳市科學技術協會黨組成員…

微信小程序真機調試異常cmdId 1006, errCode-50011-已解決

cmdId 1006, errCode-50011 起因 小程序在模擬器上預覽沒問題,真機調試和體驗版首頁打不開,點展開顯示cmdId 1006, errCode-50011 解決 查了下1006, 說是廣告, 我沒接廣告,這個也不是錯誤碼 1006廣告組件被駁回你的廣告正在被審核,無法展現廣告后來找到幾個類似的帖子…

arm開發板 GDB遠程調試方法

1.前言 1.在linux下開發,免不了使用gdb調試,但是linux下開發嵌入式,都是跑在ARM板子上的,網上有很多GDB的基礎教程,但是能在ARM開發板用的時候,會有各種問題。 比如:*.cpp: No such file or di…

Android su

1. userdebug和user版本 2. 關閉selinux system/core diff --git a/init/selinux.cpp b/init/selinux.cpp index 5a0255acd..787917274 100644--- a/init/selinux.cpp b/init/selinux.cpp -104,6 104,8 EnforcingStatus StatusFromCmdline() { } bool IsEnforcing() { …

元宇宙時代超高清視音頻技術白皮書關于流媒體協議和媒體傳輸解讀

流媒體協議 元宇宙業務場景對流媒體傳輸的實時性和互動性提出了更高的要求,這就需要在傳統的 RTMP、SRT、 HLS 等基礎上增加實時互動的支持。實時互動,指在遠程條件下溝通、協作,可隨時隨地接入、實時地傳遞虛實融合的多維信息,身…

萬賓燃氣管網監測解決方案,守護城市生命線安全

方案背景 城市燃氣管網作為連接天然氣長輸管線與天然氣用戶的橋梁,擔負著向企業和居民用戶直接供氣的重要職責。隨著城市燃氣需求的急劇增加,城市燃氣管網規模日趨龐大,安全隱患和風險也隨之增加。目前,我國燃氣管網的運行仍存在…

Mathematica(42)-計算N個數值的和

比如,我們要用Mathematica求得到下面的式子: 這就需要用到一個函數:Sum 具體地,Sum函數的使用形式如下: 因此,按照公式就可以得到下面的結果: 如果,我們想要將求和號也加進去&#…

Jenkins的流水線啟動jar后未執行問題處理

現象 在流水線里配置了啟動腳本例如,nohup java -jar xxx.jar >nohup.out 2>&1 & 但是在服務器發現服務并未啟動,且nohup日志里沒輸出日志,這樣的原因是jenkins在執行完腳本后,就退出了這個進程。 在啟動腳本執行jar命令的上一步加入以下…

【AIGC 訊飛星火 | 百度AI|ChatGPT| 】智能對比

AI智能對比 🍸 前言🍺 概念類對比🍵 訊飛🍵 百度AI🍵 chatGPT 🍹 功能類對比? 訊飛? 百度AI? chatGPT 🥃 可輸入字數對比🥤 百度AI🥤 訊飛🥤 chatGPT &…

【Django】Task1安裝python環境及運行項目

【Django】Task1安裝python環境及運行項目 寫在最前 8月份Datawhale組隊學習,在這個群除我佬的時代,寫一下blog記錄學習過程。 參考資源: 學習項目github:https://github.com/Joe-2002/sweettalk-django4.2 隊長博客&#xff1a…

RocketMQ 消息消費 輪詢機制 PullRequestHoldService

1. 概述 先來看看 RocketMQ 消費過程中的輪詢機制是啥。首先需要補充一點消費相關的前置知識。 1.1 消息消費方式 RocketMQ 支持多種消費方式,包括 Push 模式和 Pull 模式 Pull 模式:用戶自己進行消息的拉取和消費進度的更新Push 模式:Broker…

探索心律失常:病因、診斷與治療以及與腸道菌群的關聯

谷禾健康 你是否有時會感到心悸、心慌、胸悶、氣短、頭暈、乏力?你是否有時感覺自己的心跳過快或過慢? 如果有上述情況,就要引起重視了,你可能存在心律失常。心律失常是最常見的心臟疾病之一,涉及到心臟的電活動節奏異…

麻辣燙數據可視化,麻辣燙市場將持續蓬勃發展

麻辣燙,這道源自中國的美食,早已成為人們生活中不可或缺的一部分。它獨特的香辣口味,讓人忍不住每每流連忘返。與人們的關系,簡直如同摯友一般。每當寒冷的冬日或疲憊的時刻,麻辣燙總是悄然走進人們的心房,…