」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 了解 Fetch API:Web 開發中網路請求的未來

了解 Fetch API:Web 開發中網路請求的未來

發佈於2024-08-30
瀏覽:509

Understanding the Fetch API: The Future of Network Requests in Web Development

介紹
Fetch API 代表了 Web 應用程式與伺服器互動以及透過網路檢索內容的方式的重大演進。 Fetch API 作為 XMLHttpRequest (XHR) 的現代替代方案推出,為開發人員提供了更強大的功能、靈活性和簡單性。隨著與現代瀏覽器的集成,Fetch 已成為建立當代 Web 應用程式的重要工具,可以更自然、更有效率地處理非同步操作。

Fetch API 是什麼?
Fetch API 是一個 JavaScript 接口,可簡化發送 HTTP 請求和處理網路回應。與舊的 XMLHttpRequest 不同,Fetch 提供了一個與 JavaScript 的 Promise API 無縫整合的簡化介面。這種整合不僅使管理非同步操作變得更加容易,而且還提高了程式碼的可讀性和可維護性,使您的程式碼庫更乾淨、更易於管理。

Fetch 的核心是圍繞 fetch() 函數建構的,這是現代瀏覽器中可用的發送網路請求的全域函數。此函數傳回解析為 Response 物件的 Promise,讓開發人員可以輕鬆存取回應資料、標頭和狀態。這允許採用更直觀、更有組織的方法來處理網路請求的結果。 (閱讀更多)

基本文法
Fetch API 圍繞著 fetch() 函數,該函數被設計得既簡單又強大。此函數用於發起網路請求,並帶有兩個主要參數:

  • URL:要取得的資源的URL字串。
  • Options(可選):包含請求的各種設定或配置的對象,例如 HTTP 方法、標頭、正文內容和模式。

簡單取得調用的結構
基本的獲取呼叫很簡單,如下所示:

fetch(url)
  .then(response => {
    // Handle the response here
  })
  .catch(error => {
    // Handle any errors here
  });

  • url為要取得的資源地址。
  • then() 方法處理 Fetch API 解析的 Promise,提供 Response 物件。
  • catch() 方法處理請求期間可能發生的任何錯誤。

基本獲取請求範例

fetch('https://api.example.com/data')
  .then(response => {
    console.log(response);
  })
  .catch(error => {
    console.error('Error:', error);
  });

此範例示範如何發出簡單的 Fetch 要求,成功後將回應記錄到控制台,並妥善處理錯誤。

為什麼要用 Fetch?

使用 Fetch 的優點

Promises: Fetch 最顯著的優點之一是它對 Promises 的使用。與 XHR 基於回調的方法相比,Promise 提供了一種更清晰、更易於管理的方式來處理非同步任務。使用 Promises,您可以連結 .then() 方法來處理成功回應,並連結 .catch() 方法來管理錯誤,從而產生更具可讀性且更易於偵錯的程式碼。

fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

此外,Fetch API 與 async/await 語法完美搭配,讓非同步程式碼更加簡單。

使用 async/await 的例子:

async function fetchData() {
  try {
    let response = await fetch('https://api.example.com/data');
    let data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('Error:', error);
  }
}

更簡潔的語法: 與 XHR 相比,Fetch 提供了現代且簡潔的語法。傳遞給 fetch() 的配置物件可以輕鬆設定請求參數,例如 HTTP 方法、標頭和正文內容,從而使程式碼更清晰、更易於維護。 (閱讀全文

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:', error));

流處理: Fetch 支援回應流,這使得開發人員能夠更有效地處理大量資料。雖然 XHR 可能會難以應對大型回應,從而導致效能問題或需要額外的處理來進行分塊處理,但 Fetch 的 Response 物件提供了 .body.getReader() 等方法來讀取分塊資料。這對於串流和管理大型資料集特別有用。

fetch('https://api.example.com/large-data')
  .then(response => {
    const reader = response.body.getReader();
    let decoder = new TextDecoder();
    let result = '';

    return reader.read().then(function processText({ done, value }) {
      if (done) {
        console.log('Stream finished.');
        return result;
      }
      result  = decoder.decode(value, { stream: true });
      return reader.read().then(processText);
    });
  })
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

閱讀全文 - 點擊此處

結論
Fetch API 徹底改變了開發人員在 Web 應用程式中發出網路請求的方式。憑藉其簡潔的語法、與 Promises 的無縫整合以及對非同步/等待和串流等現代功能的支持,Fetch 提供了一個強大而靈活的工具來處理 HTTP 請求。隨著 Web 開發的不斷發展,Fetch API 將仍然是建立高效、可維護和現代 Web 應用程式的關鍵元件。

版本聲明 本文轉載於:https://dev.to/code_passion/understanding-the-fetch-api-the-future-of-network-requests-in-web-development-5191?1如有侵犯,請聯絡study_golang@163 .com刪除
最新教學 更多>
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-05-09
  • 您如何在Laravel Blade模板中定義變量?
    您如何在Laravel Blade模板中定義變量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配變量對於存儲以後使用的數據至關重要。在使用“ {{}}”分配變量的同時,它可能並不總是最優雅的解決方案。 幸運的是,Blade通過@php Directive提供了更優雅的方法: $ old_section =...
    程式設計 發佈於2025-05-09
  • 為什麼在我的Linux服務器上安裝Archive_Zip後,我找不到“ class \” class \'ziparchive \'錯誤?
    為什麼在我的Linux服務器上安裝Archive_Zip後,我找不到“ class \” class \'ziparchive \'錯誤?
    class'ziparchive'在Linux Server上安裝Archive_zip時找不到錯誤 commant in lin ins in cland ins in lin.11 on a lin.1 in a lin.11錯誤:致命錯誤:在... cass中找不到類z...
    程式設計 發佈於2025-05-09
  • 如何簡化PHP中的JSON解析以獲取多維陣列?
    如何簡化PHP中的JSON解析以獲取多維陣列?
    php 試圖在PHP中解析JSON數據的JSON可能具有挑戰性,尤其是在處理多維數組時。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    程式設計 發佈於2025-05-09
  • 如何在其容器中為DIV創建平滑的左右CSS動畫?
    如何在其容器中為DIV創建平滑的左右CSS動畫?
    通用CSS動畫,用於左右運動 ,我們將探索創建一個通用的CSS動畫,以向左和右移動DIV,從而到達其容器的邊緣。該動畫可以應用於具有絕對定位的任何div,無論其未知長度如何。 問題:使用左直接導致瞬時消失 更加流暢的解決方案:混合轉換和左 [並實現平穩的,線性的運動,我們介紹了線性的轉換。...
    程式設計 發佈於2025-05-09
  • 在PHP中如何高效檢測空數組?
    在PHP中如何高效檢測空數組?
    在PHP 中檢查一個空數組可以通過各種方法在PHP中確定一個空數組。如果需要驗證任何數組元素的存在,則PHP的鬆散鍵入允許對數組本身進行直接評估:一種更嚴格的方法涉及使用count()函數: if(count(count($ playerList)=== 0){ //列表為空。 } 對...
    程式設計 發佈於2025-05-09
  • Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    程式設計 發佈於2025-05-09
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-05-09
  • 將圖片浮動到底部右側並環繞文字的技巧
    將圖片浮動到底部右側並環繞文字的技巧
    在Web設計中圍繞在Web設計中,有時可以將圖像浮動到頁面右下角,從而使文本圍繞它纏繞。這可以在有效地展示圖像的同時創建一個吸引人的視覺效果。 css位置在右下角,使用css float and clear properties: img { 浮點:對; ...
    程式設計 發佈於2025-05-09
  • 如何檢查對像是否具有Python中的特定屬性?
    如何檢查對像是否具有Python中的特定屬性?
    方法來確定對象屬性存在尋求一種方法來驗證對像中特定屬性的存在。考慮以下示例,其中嘗試訪問不確定屬性會引起錯誤: >>> a = someClass() >>> A.property Trackback(最近的最新電話): 文件“ ”,第1行, AttributeError: SomeClass...
    程式設計 發佈於2025-05-09
  • C++20 Consteval函數中模板參數能否依賴於函數參數?
    C++20 Consteval函數中模板參數能否依賴於函數參數?
    [ consteval函數和模板參數依賴於函數參數在C 17中,模板參數不能依賴一個函數參數,因為編譯器仍然需要對非contexexpr futcoriations contim at contexpr function進行評估。 compile time。 C 20引入恆定函數,必須在編譯時進...
    程式設計 發佈於2025-05-09
  • 在Oracle SQL中如何提取下劃線前的子字符串?
    在Oracle SQL中如何提取下劃線前的子字符串?
    [ 在oracle sql 解決方案: Explanation:SUBSTR function extracts a substring starting from the specified position (0) and continuing for a specified length.IN...
    程式設計 發佈於2025-05-09
  • PHP SimpleXML解析帶命名空間冒號的XML方法
    PHP SimpleXML解析帶命名空間冒號的XML方法
    在php 很少,請使用該限制很大,很少有很高。例如:這種技術可確保可以通過遍歷XML樹和使用兒童()方法()方法的XML樹和切換名稱空間來訪問名稱空間內的元素。
    程式設計 發佈於2025-05-09
  • 如何正確使用與PDO參數的查詢一樣?
    如何正確使用與PDO參數的查詢一樣?
    在pdo 中使用類似QUERIES在PDO中的Queries時,您可能會遇到類似疑問中描述的問題:此查詢也可能不會返回結果,即使$ var1和$ var2包含有效的搜索詞。錯誤在於不正確包含%符號。 通過將變量包含在$ params數組中的%符號中,您確保將%字符正確替換到查詢中。沒有此修改,PD...
    程式設計 發佈於2025-05-09
  • 在Java中使用for-to-loop和迭代器進行收集遍歷之間是否存在性能差異?
    在Java中使用for-to-loop和迭代器進行收集遍歷之間是否存在性能差異?
    For Each Loop vs. Iterator: Efficiency in Collection TraversalIntroductionWhen traversing a collection in Java, the choice arises between using a for-...
    程式設計 發佈於2025-05-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3