axios
和 fetch
是用于發起 HTTP 請求的兩種常見工具,它們的主要區別如下:
1. 瀏覽器兼容性
- axios:基于
XMLHttpRequest
,兼容性較好,支持較舊的瀏覽器(如 IE11)。 - fetch:現代瀏覽器原生支持,但不兼容 IE 等舊瀏覽器,可能需要 polyfill。
2. API 設計
- axios:API 設計簡潔,支持鏈式調用,使用 Promise,提供便捷的請求和響應攔截器。
- fetch:API 較底層,返回 Promise,但需要手動處理 JSON 轉換和狀態碼檢查。
3. 請求和響應處理
- axios:自動轉換 JSON 數據,響應數據在
data
屬性中,提供請求和響應攔截器。 - fetch:需手動調用
.json()
方法解析 JSON,且不會自動處理錯誤狀態碼(如 404、500)。
4. 錯誤處理
- axios:HTTP 錯誤狀態碼(如 404、500)會觸發
catch
,便于統一處理。 - fetch:僅在網絡故障時觸發
catch
,HTTP 錯誤狀態碼需手動處理。
5. 取消請求
- axios:支持通過
CancelToken
或AbortController
取消請求。 - fetch:僅支持
AbortController
取消請求。
6. 進度監控
- axios:支持上傳和下載進度監控。
- fetch:不直接支持進度監控,需通過其他方式實現。
7. 體積
- axios:體積較大(約 13KB)。
- fetch:原生支持,無需額外引入。
示例代碼
axios
axios.get('https://api.example.com/data').then(response => console.log(response.data)).catch(error => console.error(error));
fetch
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:功能豐富,使用方便,適合復雜場景。
- fetch:輕量、現代,適合簡單場景或對包大小敏感的項目。
根據項目需求選擇合適的工具。