最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、XMLHttpRequest(XHR)方式

早期的前端異步請求主要依賴于 XMLHttpRequest 對象。它允許 JavaScript 以異步方式與服務(wù)器進行數(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 適合需要兼容老瀏覽器或維護老項目時使用。
  • fetch 更適合現(xiàn)代前端開發(fā),推薦優(yōu)先使用。

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

相關(guān)文章

最新評論

巴马| 肥城市| 仁化县| 临颍县| 确山县| 广州市| 吉隆县| 绥宁县| 济阳县| 临沭县| 天水市| 察隅县| 东至县| 漾濞| 东乡族自治县| 仲巴县| 商都县| 汕头市| 阳江市| 南城县| 青浦区| 磐石市| 永济市| 花莲县| 遂昌县| 固阳县| 清水县| 威海市| 新安县| 鹰潭市| 容城县| 苍南县| 富顺县| 琼中| 陆川县| 晋城| 儋州市| 洛川县| 陈巴尔虎旗| 德州市| 云龙县|