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

前端JavaScript異步請(qǐng)求的兩種方式詳解

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

一、XMLHttpRequest(XHR)方式

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

代碼示例

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

邏輯說(shuō)明

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

頁(yè)面渲染

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

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

二、Fetch 方式

隨著 ES6+ 的普及,fetch API 成為更現(xiàn)代、更簡(jiǎn)潔的異步請(qǐng)求方式。它本質(zhì)上返回一個(gè) Promise 實(shí)例,天然支持 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("");
});

邏輯說(shuō)明

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

優(yōu)勢(shì)

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

三、對(duì)比與總結(jié)

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

結(jié)論

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

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

相關(guān)文章

最新評(píng)論

浙江省| 瑞昌市| 绥德县| 铜川市| 建德市| 图木舒克市| 叙永县| 衡东县| 梨树县| 琼中| 甘南县| 迁安市| 门头沟区| 二连浩特市| 清苑县| 安丘市| 新乡市| 永春县| 陆川县| 泸溪县| 阳谷县| 高平市| 武强县| 神农架林区| 茶陵县| 瑞安市| 思南县| 临漳县| 蒙阴县| 阜南县| 瑞昌市| 芦山县| 革吉县| 江北区| 亚东县| 延长县| 凤城市| 蓬莱市| 浪卡子县| 南丹县| 庆阳市|