欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

前端JavaScript異步請求的兩種方式詳解

 更新時間:2025年07月14日 11:05:23   作者:LeeAt  
在現(xiàn)代前端開發(fā)中,前后端分離已成為主流,前端經(jīng)常需要主動向后端請求數(shù)據(jù)接口,實現(xiàn)頁面的動態(tài)更新,本文將通過兩個示例,介紹前端常用的兩種異步請求方式:XMLHttpRequest(XHR)和 fetch,并結(jié)合代碼和注釋進(jìn)行詳細(xì)講解,需要的朋友可以參考下

一、XMLHttpRequest(XHR)方式

早期的前端異步請求主要依賴于 XMLHttpRequest 對象。它允許 JavaScript 以異步方式與服務(wù)器進(jìn)行數(shù)據(jù)交換,而無需重新加載整個頁面。

代碼示例

const getJSON = async url => {
  return new Promise((resolve, reject) => {
    // executor 執(zhí)行器
    // 開始處于pending狀態(tài)
    const xhr = new XMLHttpRequest(); // 實例化
    xhr.open("GET", "https://api.github.com/users/LeeAt67/repos");
    console.log(xhr.readyState);
    xhr.send(); // 發(fā)送請求
    // 事件監(jiān)聽 回調(diào)函數(shù)
    xhr.onreadystatechange = function () {
      if (xhr.readyState === 4) {
        // 響應(yīng)內(nèi)容到達(dá)了
        resolve(JSON.parse(xhr.responseText));
      }
    };
  });
};

邏輯說明

  1. 實例化 XHR 對象:通過 new XMLHttpRequest() 創(chuàng)建請求對象。
  2. 打開請求通道xhr.open("GET", url) 指定請求方式和目標(biāo)地址。
  3. 發(fā)送請求xhr.send() 向服務(wù)器發(fā)送請求。
  4. 監(jiān)聽狀態(tài)變化:通過 xhr.onreadystatechange 監(jiān)聽請求狀態(tài)的變化。當(dāng) readyState 為 4 時,表示響應(yīng)內(nèi)容已經(jīng)到達(dá),可以通過 xhr.responseText 獲取數(shù)據(jù)。
  5. Promise 封裝:將 XHR 封裝在 Promise 中,使其支持 async/await,更符合現(xiàn)代 JavaScript 的異步編程習(xí)慣。

頁面渲染

請求到的數(shù)據(jù)會被渲染到頁面的 <ul id="repos"></ul> 元素中:

document.getElementById("repos").innerHTML = data
  .map(item => `<li>${item.name}</li>`)
  .join("");

二、Fetch 方式

隨著 ES6+ 的普及,fetch API 成為更現(xiàn)代、更簡潔的異步請求方式。它本質(zhì)上返回一個 Promise 實例,天然支持 async/await。

代碼示例

document.addEventListener("DOMContentLoaded", async () => {
  const result = await fetch("https://api.github.com/users/LeeAt67/repos");
  const data = await result.json();
  document.getElementById("repos").innerHTML = data
    .map(item => `<li>${item.name}</li>`)
    .join("");
});

邏輯說明

  1. 頁面加載完成后執(zhí)行:通過 DOMContentLoaded 事件,確保 DOM 元素已加載。
  2. 發(fā)起請求fetch(url) 直接發(fā)起請求,返回 Promise。
  3. 解析數(shù)據(jù)await result.json() 將響應(yīng)體解析為 JSON 數(shù)據(jù)。
  4. 渲染頁面:同樣將數(shù)據(jù)渲染到 <ul id="repos"></ul>。

優(yōu)勢

  • 語法更簡潔,鏈?zhǔn)秸{(diào)用更自然。
  • 支持更豐富的配置和更好的語義化。
  • 天然支持 Promise,易于與 async/await 配合。

三、對比與總結(jié)

特性XMLHttpRequestfetch
語法相對繁瑣,需要事件監(jiān)聽簡潔,Promise 化
支持兼容性好,老項目常用現(xiàn)代瀏覽器原生支持
返回值無 Promise,需手動封裝返回 Promise,支持 async/await
錯誤處理需手動判斷狀態(tài)碼可直接用 try/catch

結(jié)論

  • XHR 適合需要兼容老瀏覽器或維護(hù)老項目時使用。
  • fetch 更適合現(xiàn)代前端開發(fā),推薦優(yōu)先使用。

到此這篇關(guān)于前端JavaScript異步請求的兩種方式詳解的文章就介紹到這了,更多相關(guān)JavaScript異步請求方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用contextMenu插件實現(xiàn)Bootstrap table彈出右鍵菜單

    使用contextMenu插件實現(xiàn)Bootstrap table彈出右鍵菜單

    如今Bootstrap這個前端框架已被許多人接受并應(yīng)用在不同的項目中,其中“開發(fā)高效,設(shè)備兼容”的特點表現(xiàn)得非常明顯。這篇文章主要介紹了使用contextMenu插件實現(xiàn)Bootstrap table彈出右鍵菜單,需要的朋友可以參考下
    2017-02-02
  • javascript垃圾收集機制的原理分析

    javascript垃圾收集機制的原理分析

    javascript具有自動垃圾收集機制,執(zhí)行環(huán)境會負(fù)責(zé)管理代碼執(zhí)行過程中使用的內(nèi)存。在編寫javascript程序時,開發(fā)人員不用再關(guān)心內(nèi)存使用問題,所需內(nèi)存的分配以及無用內(nèi)存的回收完全實現(xiàn)了自動管理。本文將詳細(xì)介紹javascript的垃圾收集機制
    2016-12-12
  • javascript中Promise使用詳解

    javascript中Promise使用詳解

    這篇文章主要介紹了javascript中Promise使用詳解,關(guān)于Promise的使用相關(guān)的知識點下面文章內(nèi)容介紹詳細(xì)具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • 手機平板等移動端適配跳轉(zhuǎn)URL的js代碼

    手機平板等移動端適配跳轉(zhuǎn)URL的js代碼

    這篇文章主要為大家分享下手機平板等移動端適配跳轉(zhuǎn)URL的js代碼,需要的朋友可以參考下
    2014-01-01
  • js 動態(tài)加載事件的幾種方法總結(jié)

    js 動態(tài)加載事件的幾種方法總結(jié)

    本篇文章主要是對js 動態(tài)加載事件的幾種方法進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • pjblog中的UBBCode.js

    pjblog中的UBBCode.js

    pjblog中的UBBCode.js...
    2007-04-04
  • bootstrap中添加額外的圖標(biāo)實例代碼

    bootstrap中添加額外的圖標(biāo)實例代碼

    可以針對校驗狀態(tài)為輸入框添加額外的圖標(biāo)。接下來通過本文給大家分享bootstrap中添加額外的圖標(biāo)實例代碼,需要的的朋友參考下吧
    2017-02-02
  • 如何使用JS獲取IE上傳文件路徑(IE7,8)

    如何使用JS獲取IE上傳文件路徑(IE7,8)

    本篇文章是對使用JS獲取IE上傳文件路徑的實現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • JavaScript中的各種寬高屬性的實現(xiàn)

    JavaScript中的各種寬高屬性的實現(xiàn)

    這篇文章主要介紹了JavaScript中的各種寬高屬性的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • JavaScript判斷DOM何時加載完畢的技巧

    JavaScript判斷DOM何時加載完畢的技巧

    處理HTML DOM文檔存在一個難題是,JavaScript可以在DOM完全加載之前執(zhí)行,這會給你的代碼引發(fā)不少的潛在問題;針對這個問題,本文給予適當(dāng)?shù)慕鉀Q方法,僅供參考
    2012-11-11

最新評論