Fetch與Axios:區別、聯系、優缺點及使用差異

Fetch與Axios:區別、聯系、優缺點及使用差異

文章目錄

  • Fetch與Axios:區別、聯系、優缺點及使用差異
    • 一、聯系
    • 二、區別
      • 1. 瀏覽器支持與兼容性
      • 2. 響應處理
      • 3. 請求攔截和響應攔截
      • 4. 錯誤處理
    • 三、優缺點
      • 1. Fetch API
        • 優點
        • 缺點
      • 2. Axios
        • 優點
        • 缺點
    • 四、使用上的差異和特性
      • 1. 發送POST請求
      • 2. 取消請求
    • 總結

在現代Web開發中,數據交互是必不可少的環節。Fetch API和Axios是兩種常用的HTTP客戶端工具,用于在瀏覽器和Node.js環境中發起HTTP請求。下面我們來詳細探討它們的區別、聯系、優缺點以及使用上的差異。

一、聯系

Fetch API和Axios的主要目的都是發起HTTP請求,實現客戶端與服務器之間的數據交互。它們都支持常見的HTTP方法,如GET、POST、PUT、DELETE等,并且可以處理各種類型的響應數據,如JSON、文本、二進制數據等。

二、區別

1. 瀏覽器支持與兼容性

  • Fetch API:是現代瀏覽器原生支持的API,無需額外引入庫。但在舊版本的瀏覽器(如IE)中不支持,需要使用polyfill來實現兼容性。
  • Axios:是一個第三方庫,需要引入才能使用。它支持所有主流瀏覽器,包括舊版本的IE,并且在Node.js環境中也能使用。

2. 響應處理

  • Fetch API:返回的是一個Promise對象,需要手動解析響應數據。例如,要獲取JSON格式的響應數據,需要調用response.json()方法。
fetch('https://api.example.com/data').then(response => response.json()).then(data => console.log(data)).catch(error => console.error(error));
  • Axios:會自動解析響應數據,默認情況下返回的就是解析后的JSON對象。
axios.get('https://api.example.com/data').then(response => console.log(response.data)).catch(error => console.error(error));

3. 請求攔截和響應攔截

  • Fetch API:本身不支持請求攔截和響應攔截,需要手動實現。
  • Axios:內置了請求攔截和響應攔截功能,可以在請求發送前和響應返回后進行一些處理,如添加請求頭、錯誤處理等。
// 請求攔截
axios.interceptors.request.use(config => {// 在發送請求之前做些什么config.headers.Authorization = 'Bearer ' + token;return config;
}, error => {// 對請求錯誤做些什么return Promise.reject(error);
});// 響應攔截
axios.interceptors.response.use(response => {// 對響應數據做點什么return response;
}, error => {// 對響應錯誤做點什么return Promise.reject(error);
});

4. 錯誤處理

  • Fetch API:只有在網絡請求失敗時才會reject Promise,即使服務器返回404、500等狀態碼,Promise仍然會resolve。需要手動檢查response.ok屬性來判斷請求是否成功。
fetch('https://api.example.com/data').then(response => {if (!response.ok) {throw new Error('Network response was not ok');}return response.json();}).then(data => console.log(data)).catch(error => console.error(error));
  • Axios:在請求失敗時會reject Promise,并且會包含詳細的錯誤信息,如狀態碼、錯誤消息等。
axios.get('https://api.example.com/data').then(response => console.log(response.data)).catch(error => {if (error.response) {// 請求已發出,但服務器響應狀態碼不在 2xx 范圍內console.log(error.response.data);console.log(error.response.status);console.log(error.response.headers);} else if (error.request) {// 請求已發出,但沒有收到響應console.log(error.request);} else {// 其他錯誤console.log('Error', error.message);}});

三、優缺點

1. Fetch API

優點
  • 原生支持,無需引入額外庫,減少項目體積。
  • 語法簡潔,符合現代JavaScript的Promise風格。
缺點
  • 瀏覽器兼容性差,需要polyfill。
  • 響應處理繁瑣,需要手動解析。
  • 錯誤處理不夠直觀。

2. Axios

優點
  • 支持所有主流瀏覽器和Node.js環境。
  • 內置請求攔截和響應攔截功能,方便處理請求和響應。
  • 自動解析響應數據,錯誤處理更完善。
  • 支持取消請求、自動轉換JSON數據等功能。
缺點
  • 需要引入第三方庫,增加項目體積。

四、使用上的差異和特性

1. 發送POST請求

  • Fetch API
fetch('https://api.example.com/data', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ key: 'value' })
}).then(response => response.json()).then(data => console.log(data)).catch(error => console.error(error));
  • Axios
axios.post('https://api.example.com/data', { key: 'value' }).then(response => console.log(response.data)).catch(error => console.error(error));

2. 取消請求

  • Fetch API:使用AbortController實現超時取消請求。
const controller = new AbortController();
const signal = controller.signal;// 設置超時時間為3000毫秒
const timeoutId = setTimeout(() => {controller.abort();
}, 3000);fetch('https://api.example.com/data', { signal }).then(response => {clearTimeout(timeoutId);return response.json();}).then(data => console.log(data)).catch(error => {if (error.name === 'AbortError') {console.log('請求超時被取消');} else {console.error(error);}});
  • Axios:使用CancelToken實現超時取消請求。
const CancelToken = axios.CancelToken;
const source = CancelToken.source();// 設置超時時間為3000毫秒
const timeoutId = setTimeout(() => {source.cancel('請求超時被取消');
}, 3000);axios.get('https://api.example.com/data', {cancelToken: source.token
}).then(response => {clearTimeout(timeoutId);console.log(response.data);}).catch(error => {if (axios.isCancel(error)) {console.log(error.message);} else {console.error(error);}});

總結

Fetch API和Axios各有優缺點,選擇使用哪一個取決于項目的具體需求。如果項目對瀏覽器兼容性要求不高,且希望減少依賴,可以選擇Fetch API;如果需要處理復雜的請求和響應,或者需要支持舊版本的瀏覽器,Axios是更好的選擇。

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

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

相關文章

【Docker】快速入門與項目部署實戰

我們在部署一個項目時,會出現一系列問題比如: 命令太多了,記不住軟件安裝包名字復雜,不知道去哪里找安裝和部署步驟復雜,容易出錯 其實上述問題不僅僅是新手,即便是運維在安裝、部署的時候一樣會覺得麻煩…

Java面試題尚硅谷版第1季

1、寫出如下代碼運行結果 1.1、 使用局部變量表和操作數棧解題 1.2、使用前置和后置遞增解題 2、寫一個單例模式 2.1、考察知識點 2.2、單例模式實現 3、類加載和初始化順序 package classload;public class Father {private int i test();private static int j method();st…

關于Qt阻斷樣式繼承的解決辦法

引言 在使用 Qt 開發桌面應用時,借助樣式表(StyleSheet)來統一定義界面風格是非常常見的做法。通常,你會在主程序中通過 qApp->setStyleSheet(...) 或者直接給某個父控件設置樣式表,讓所有的子控件都采用相同的配色…

鼠標右鍵添加新建某種文件的方法

場景 我經常用到.emmx,.eddx文件,電腦上裝的是wpsX億圖(因為有wps會員),沒有開億圖會員。 然后問題就是,思維導圖和流程圖我都能正常開,正常編輯,但鼠標右鍵沒有新建這兩個文件的按…

Inxpect安全雷達傳感器與控制器:動態檢測 + 抗干擾技術重構工業安全防護體系

Inxpect 推出工業安全領域新型智能傳感器與控制器,其核心產品為雷達掃描儀,具備動態調整檢測區域、抗干擾能力強等特點,可精準檢測危險區域人員進入或存在情況,適用于移動機器人等場景。 Inxpect安全雷達傳感器核心功能 動態檢測…

【AI學習】李廣密與階躍星辰首席科學家張祥雨對談:多模態發展的歷史和未來

仔細閱讀了文章《專訪張祥雨:多模態推理和自主學習是未來的 2 個 「GPT-4」 時刻》 https://mp.weixin.qq.com/s/892QuRPH9uP6zN6dS-HZMw 非常贊嘆的一篇文章,說清楚了NLP、CV發展中的許多重大問題,讀來醍醐灌頂!這樣的文章&…

C++中std::deque詳解和實戰工程代碼示例

C中std::deque詳解和實戰工程代碼示例 std::deque(雙端隊列)是 C 標準庫中的一個序列容器,與 std::vector 類似,但它支持從頭部和尾部高效地插入和刪除元素。它底層采用分段連續空間實現,兼具靈活性與性能。 一、基本…

【AI大模型入門指南】概念與專有名詞詳解 (二)

【AI大模型入門指南】概念與專有名詞詳解 (二) 一 、前言 當你和聊天機器人聊得天花亂墜時,當你用文字讓AI生成精美圖片時,當手機相冊自動幫你分類照片時 —— 這些看似智能的操作背后,都藏著 AI 大模型的身影。 本…

AIStor 的模型上下文協議 (MCP) 服務器:管理功能

在本系列的上一篇博文中,我們討論了 MinIO AIStor 的模型上下文協議 (MCP) 服務器的基本用戶級功能。我們學習了如何使用人類語言命令查看存儲桶的內容、分析對象并標記它們以便將來處理,以及如何通過 LLM(例如 Anthropic Claude)…

期權末日輪實值期權盈利未平倉怎么辦?

本文主要介紹期權末日輪實值期權盈利未平倉怎么辦?期權末日輪實值期權盈利未平倉該怎么辦,需要明確幾個關鍵點:末日輪指的是期權到期日臨近的時候,通常指最后一周,尤其是最后一天,這時候時間價值衰減很快&a…

C++/Qt 聯合編程中的定時器使用陷阱:QObject::startTimer 報錯詳解

在 Qt 開發中,QTimer 是一個常用的工具類,用于處理定時事件。但不少開發者在 C/Qt 聯合編程,尤其是在工具類、靜態類、線程中使用定時器時,會遇到如下令人困惑的報錯: QObject::startTimer: Timers can only be used …

CentOS7.9 查詢運維安全日志,排查惡意用戶

1、查看系統版本 cat /etc/redhat-release uname -a 2、查看所有賬號 cat /etc/shadow 3、修改 root 密碼 passwd 3、查看賬號ID id jinzhi 4、查看登錄日志 lastlog 5、查看操作日志 cat .bash_history sudo cat /home/yunwei/.bash_history sudo grep root /va…

多模態大語言模型arxiv論文略讀(117)

Training-free Zero-shot Composed Image Retrieval via Weighted Modality Fusion and Similarity ?? 論文標題:Training-free Zero-shot Composed Image Retrieval via Weighted Modality Fusion and Similarity ?? 論文作者:Ren-Di Wu, Yu-Yen L…

如何正確的配置eureka server集群

將 Eureka Server 實例的 hostname 都配置成相同的值,在 Eureka Server 集群環境下同樣是不推薦且通常會導致嚴重問題的, 核心問題:Eureka Server 集群的工作機制 Eureka Server 集群通過相互注冊(Peering)來實現高可…

AI支持下的-ArcGIS數據處理、空間分析、可視化及多案例綜合應用

查看原文>>> 從入門到精通-AI支持下的-ArcGIS數據處理、空間分析、可視化及多案例綜合應用 結合ArcGIS和GPT的優勢,本文重點進行AI大模型應用、ArcGIS工作流程及功能、Prompt使用技巧、AI助力工作流程、AI助力數據讀取與處理、AI助力空間分析、AI助力遙感…

vue3-ts: v-model 和 props 的關系

在 Vue.js 中,v-model 是一個語法糖,它實際上是 :value 和 input 事件的組合。 當你使用 v-model 綁定一個組件時,默認情況下,組件會通過 props 接收 value 這個 prop, 并通過觸發 input 事件來更新父組件中的數據。 …

學車筆記 變擋

超15就可以加一檔了 有些人對手動擋的檔位有一些誤解_嗶哩嗶哩_bilibili 獻給所有新司機.開手動檔擺脫頓挫的根本方法.學會看轉速!沒那么復雜!_嗶哩嗶哩_bilibili 減速到怠速降一檔

STM32的DMA簡介

STM32的DMA簡介 一、DMA概述 DMA(Direct Memory Access,直接存儲器存取)是一種硬件機制,它允許外設和存儲器之間或者存儲器和存儲器之間進行高速數據傳輸,而無需CPU的干預。這種機制可以極大地節省CPU資源&#xff0c…

Spring-AOP知識點

一、AOP簡介 1.AOP概念 2.AOP思想實現方案 3.AOP相關概念 二、基于xml配置AOP 1.快速入門 2.AOP配置詳解 3.AOP原理剖析 三、基于注解配置AOP 1.快速入門 2.注解方式AOP配置詳解 抽取切點表達式

Java@Data 與 @NotNull 注解沖突問題

第一章:核心概念解析 1. Data(Lombok 提供) 自動生成以下方法: gettersettertoString()equals()hashCode() 簡化實體類編寫,提高開發效率。 示例: import lombok.Data;Data public class User {private…