ES6(8) Fetch API 詳解

1. Fetch API 簡介

??fetch 是 ES6 提供的基于 Promise 的 API,用于發送 HTTP 請求并處理服務器響應數據。與傳統的 XMLHttpRequest 相比,fetch 語法更加簡潔,使用 Promise 進行異步處理,避免了回調地獄。

1.1 fetch() 的基本用法

fetch(url, options) 返回一個 Promise,其中:

  • url:請求的地址。

  • options(可選):一個對象,用于設置請求方法、請求頭、請求體等。

示例:

fetch('http://127.0.0.1/get').then(response => response.json()) // 解析 JSON 格式的響應數據.then(data => console.log("get.data:", data)).catch(error => console.log("get.error:", error.message)).finally(() => console.log("get.finally"));

2. 發送不同類型的 HTTP 請求

2.1 發送 GET 請求

GET 請求不需要 body,通常用于獲取數據。

fetch('http://127.0.0.1/get').then(response => response.json()).then(data => console.log("get.data:", data)).catch(error => console.log("get.error:", error.message)).finally(() => console.log("get.finally"));

2.2 發送 POST 請求(表單數據)

當需要提交數據時,可以使用 POST 方法,并在 headers 指定 Content-Type

fetch('http://127.0.0.1/post', {method: 'POST',headers: {'Content-Type': 'application/x-www-form-urlencoded'},body: new URLSearchParams({name: 'theodore',web: 'https://blog.csdn.net/Theodore_1022'})
})
.then(response => response.json())
.then(data => console.log("post.data:", data))
.catch(error => console.log("post.error:", error.message))
.finally(() => console.log("post.finally"));

2.3 發送 POST 請求(JSON 數據)

提交 JSON 數據時,Content-Type 需要設置為 application/json,并使用 JSON.stringify() 處理 body

fetch('http://127.0.0.1/postJson', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({name: 'theodore',web: 'https://blog.csdn.net/Theodore_1022'})
})
.then(response => response.json())
.then(data => console.log("postJson.data:", data))
.catch(error => console.log("postJson.error:", error.message))
.finally(() => console.log("postJson.finally"));

3. 處理 Fetch 響應

fetch 返回的 Promise 解析后得到的是一個 Response 對象,需要進一步解析數據。

fetch('http://127.0.0.1/get').then(response => {if (!response.ok) {throw new Error(`HTTP 錯誤!狀態碼: ${response.status}`);}return response.json();}).then(data => console.log("get.data:", data)).catch(error => console.log("get.error:", error.message));

3.1 解析不同格式的響應數據

fetchResponse 對象提供多個方法來解析數據:

  • response.json():解析 JSON 格式數據。

  • response.text():解析文本數據。

  • response.blob():解析二進制數據,如圖片、音視頻。

  • response.arrayBuffer():解析為 ArrayBuffer,用于處理二進制流數據。

示例:

fetch('http://127.0.0.1/data').then(response => response.text()).then(text => console.log("text data:", text));

4. 處理超時請求

fetch 默認沒有超時機制,可以使用 AbortController 來手動終止請求。

const controller = new AbortController();
const signal = controller.signal;setTimeout(() => controller.abort(), 5000); // 5 秒后取消請求fetch('http://127.0.0.1/timeout', { signal }).then(response => response.json()).then(data => console.log("data:", data)).catch(error => {if (error.name === 'AbortError') {console.log('請求超時,已取消');} else {console.log('請求失敗:', error.message);}});

5. 處理跨域問題

如果請求跨域,需要服務器配置 CORS(跨域資源共享)。

  • 服務器返回 Access-Control-Allow-Origin: * 允許跨域訪問。

  • 如果涉及 credentials(如 cookies),需要設置 fetchcredentials

fetch('http://127.0.0.1/protected', {credentials: 'include' // 允許攜帶 cookies
})
.then(response => response.json())
.then(data => console.log("data:", data));

6. 結語

??fetch 是 ES6 現代 Web 開發中常用的 API,它相比傳統 XMLHttpRequest 更加簡潔且基于 Promise,使得異步代碼更加優雅。掌握 fetch,可以更輕松地處理 HTTP 請求,提高前端開發效率。

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

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

相關文章

原生SSE實現AI智能問答+Vue3前端打字機流效果

實現流程: 1.用戶點擊按鈕從右側展開抽屜(drawer),打開模擬對話框 2.用戶輸入問題,點擊提問按鈕,創建一個SSE實例請求后端數據,由于SSE是單向流,所以每提一個問題都需要先把之前的實…

CUDA 工具鏈將全面原生支持 Python

根據 NVIDIA 在 2025 年 GTC 大會上的官宣,CUDA 工具鏈將全面原生支持 Python 編程,這一重大更新旨在降低 GPU 編程門檻,吸引更廣泛的 Python 開發者進入 CUDA 生態。以下是核心信息整合: 1. 原生支持的意義與背景 無需 C/C 基礎…

jupyter notebook 顯示conda虛擬環境

使用 nb_conda_kernels 安裝 nb_conda_kernels:這個包可以自動從你的 Conda 環境中發現并列出內核。 conda activate base # 確保你在 base 環境或任何其他環境中安裝 conda install nb_conda_kernels顯示jupyternotebook當前所在的位置。

【AI】MCP概念

一文講透 MCP(附 Apifox MCP Server 內測邀請) 7分鐘講清楚MCP是什么?統一Function calling規范,工作量銳減至1/6,人人手搓Manus!? | 一鍵鏈接千臺服務器,幾行代碼接入海量外部工具…

WSL1升級到WSL2注意事項

今天要在WSL上安裝docker,因為機器上安裝了wsl1,docker安裝后啟動不了,通過詢問deepseek發現docker只能在wsl2上安裝,因此就想著將本機的wsl1升級到wsl2。 確保你的 Windows 系統是 Windows 10(版本 1903 及以上&…

Pycharm常用快捷鍵總結

主要是為了記錄windows下的PyCharm的快捷鍵,里面的操作都試過了功能描述會增加備注。 文件操作 快捷鍵功能描述Ctrl N新建文件Ctrl Shift N根據名稱查找文件Ctrl O打開文件Ctrl S保存當前文件Ctrl Shift S另存為Alt F12打開終端(Terminal&…

電池分選機:新能源時代的品質守護者|深圳比斯特自動化

在這個新能源蓬勃發展的時代,電池作為能量的存儲與釋放單元,其性能與質量直接關系到整個系統的穩定運行與效率提升。而電池分選機,作為電池生產流程中的關鍵一環,正扮演著品質守護者的角色,為新能源產業的高質量發展保…

認識 Linux 內存構成:Linux 內存調優之虛擬內存與物理內存

寫在前面 博文內容涉及 Linux 內存構成基本認知包括虛擬內存和物理內存映射,多級頁表和MMU簡單認知理解不足小伙伴幫忙指正對每個人而言,真正的職責只有一個:找到自我。然后在心中堅守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是對大眾理想的…

SCI科學論文的重要組成部分

科學論文的核心結構 科學論文通常遵循IMRAD結構,即: 引言(Introduction)方法(Methods)結果(Results)討論(Discussion) 除此之外,還包括其他幾個關鍵部分。讓我為您詳細介紹每個部分的作用和重要性: 1. 標題(Title) 標題是論文…

期權時間價值與隱含波動率怎么選?

期權隱含波動率與時間價值要怎么選?期權隱含波動率IV對期權價格有著巨大的影響。整體來看,期權隱波與期權價格呈正相關關系。當期權隱波從低水平上升時,期權價格也會相應上漲;反之,當隱波下降,期權價格則會…

STM32 HAL庫擴大USB CDC的輸入緩沖區

STM32 HAL庫,使用USB, 擴大輸入暫存區的方法 使用STM32的USB通訊CubeMX建立配置Serial Wire時鐘配置USB配置時鐘頻率設置代碼編寫運行效果總結使用STM32的USB通訊 STM32可以不用使用串口轉換直接和USB通訊。這給串口調試提供了極大的方便。編程,我使用了STM32CubeIDE編程。這…

ffmpeg函數簡介(封裝格式相關)

文章目錄 🌟 前置說明:FFmpeg 中 AVFormatContext 是什么?🧩 1. avformat_alloc_context功能:場景: 🧩 2. avformat_open_input功能:說明:返回值: &#x1f9…

費馬小定理

快速冪 理論 a n a a ? a a^n a a \cdots a anaa?a,暴力的計算需要 O(n) 的時間。 快速冪使用二進制拆分和倍增思想,僅需要 O(logn) 的時間。 對 n 做二進制拆分,例如, 3 13 3 ( 1101 ) 2 3 8 ? 3 4 ? 3 1 3^{13}…

ADGaussian:用于自動駕駛的多模態輸入泛化GS方法

25年4月來自香港中文大學和浙大的論文“ADGaussian: Generalizable Gaussian Splatting for Autonomous Driving with Multi-modal Inputs”。 提出 ADGaussian 方法,用于可泛化的街道場景重建。所提出的方法能夠從單視圖輸入實現高質量渲染。與之前主要關注幾何細…

js中this指向問題

在js中,this關鍵字的指向是一個比較重要的概念,它的值取決于函數的調用方式。 全局狀態下 //全局狀態下 this指向windowsconsole.log("this", this);console.log("thiswindows", this window); 在函數中 // 在函數中 this指向win…

我的NISP二級之路-03

目錄 一.ISMS 二.IP 三.http 四.防火墻 五.文件 解析 解析 六.攻擊 解析 解析 七.風險管理工程 八.信息系統安全保護等級 九.我國信息安全保障 一.ISMS 1.文檔體系建設是信息安全管理體系(ISMS)建設的直接體現,下列說法不正確的是: A&#…

HarmonyOS應用開發者高級-編程題-001

題目一:跨設備分布式數據同步 需求描述 開發一個分布式待辦事項應用,要求: 手機與平板登錄同一華為賬號時,自動同步任務列表任一設備修改任務狀態(完成/刪除),另一設備實時更新任務數據在設備…

動態列表的數據渲染、新增、編輯等功能開發及數據處理

說一個比較繁瑣的功能吧,我使用的是 vue element UI vxe-table 來實現的這個動態列表,其實呢 vxe-table 這個表格插件里邊有動態表格 vxe-grid 只需要通過表頭數組里邊的 field: name, 與表體數組里的 name: Test1, 對應上就行了,很簡單吧…

Linux學習筆記——文件系統基礎與根文件系統詳解

文件系統基礎與根文件系統詳解 什么是文件系統?什么是根文件系統(Root File System)?一句話理解:更詳細地說: 根文件系統為什么重要?1. 啟動依賴2. 提供根目錄 /3. 支持掛載其他文件系統4. 提供…

R語言進行聚類分析

目錄 簡述6種系統聚類法 實驗實例和數據資料: 上機實驗步驟: 進行最短距離聚類: 進行最長距離聚類: 進行中間距離聚類: 進行類平均法聚類: 進行重心法聚類: 進行ward.D聚類:…