前端JavaScript异步请求的两种方式详解

 更新时间:2025年07月14日 11:05:23   作者:LeeAt  
在现代前端开发中,前后端分离已成为主流,前端经常需要主动向后端请求数据接口,实现页面的动态更新,本文将通过两个示例,介绍前端常用的两种异步请求方式:XMLHttpRequest(XHR)和 fetch,并结合代码和注释进行详细讲解,需要的朋友可以参考下

一、XMLHttpRequest(XHR)方式

早期的前端异步请求主要依赖于 XMLHttpRequest 对象。它允许 JavaScript 以异步方式与服务器进行数据交换,而无需重新加载整个页面。

代码示例

const getJSON = async url => {
  return new Promise((resolve, reject) => {
    // executor 执行器
    // 开始处于pending状态
    const xhr = new XMLHttpRequest(); // 实例化
    xhr.open("GET", "https://api.github.com/users/LeeAt67/repos");
    console.log(xhr.readyState);
    xhr.send(); // 发送请求
    // 事件监听 回调函数
    xhr.onreadystatechange = function () {
      if (xhr.readyState === 4) {
        // 响应内容到达了
        resolve(JSON.parse(xhr.responseText));
      }
    };
  });
};

逻辑说明

  1. 实例化 XHR 对象:通过 new XMLHttpRequest() 创建请求对象。
  2. 打开请求通道xhr.open("GET", url) 指定请求方式和目标地址。
  3. 发送请求xhr.send() 向服务器发送请求。
  4. 监听状态变化:通过 xhr.onreadystatechange 监听请求状态的变化。当 readyState 为 4 时,表示响应内容已经到达,可以通过 xhr.responseText 获取数据。
  5. Promise 封装:将 XHR 封装在 Promise 中,使其支持 async/await,更符合现代 JavaScript 的异步编程习惯。

页面渲染

请求到的数据会被渲染到页面的 <ul id="repos"></ul> 元素中:

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

二、Fetch 方式

随着 ES6+ 的普及,fetch API 成为更现代、更简洁的异步请求方式。它本质上返回一个 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. 页面加载完成后执行:通过 DOMContentLoaded 事件,确保 DOM 元素已加载。
  2. 发起请求fetch(url) 直接发起请求,返回 Promise。
  3. 解析数据await result.json() 将响应体解析为 JSON 数据。
  4. 渲染页面:同样将数据渲染到 <ul id="repos"></ul>

优势

  • 语法更简洁,链式调用更自然。
  • 支持更丰富的配置和更好的语义化。
  • 天然支持 Promise,易于与 async/await 配合。

三、对比与总结

特性XMLHttpRequestfetch
语法相对繁琐,需要事件监听简洁,Promise 化
支持兼容性好,老项目常用现代浏览器原生支持
返回值无 Promise,需手动封装返回 Promise,支持 async/await
错误处理需手动判断状态码可直接用 try/catch

结论

  • XHR 适合需要兼容老浏览器或维护老项目时使用。
  • fetch 更适合现代前端开发,推荐优先使用。

到此这篇关于前端JavaScript异步请求的两种方式详解的文章就介绍到这了,更多相关JavaScript异步请求方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用contextMenu插件实现Bootstrap table弹出右键菜单

    使用contextMenu插件实现Bootstrap table弹出右键菜单

    如今Bootstrap这个前端框架已被许多人接受并应用在不同的项目中,其中“开发高效,设备兼容”的特点表现得非常明显。这篇文章主要介绍了使用contextMenu插件实现Bootstrap table弹出右键菜单,需要的朋友可以参考下
    2017-02-02
  • javascript垃圾收集机制的原理分析

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

    javascript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存。在编写javascript程序时,开发人员不用再关心内存使用问题,所需内存的分配以及无用内存的回收完全实现了自动管理。本文将详细介绍javascript的垃圾收集机制
    2016-12-12
  • javascript中Promise使用详解

    javascript中Promise使用详解

    这篇文章主要介绍了javascript中Promise使用详解,关于Promise的使用相关的知识点下面文章内容介绍详细具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • 手机平板等移动端适配跳转URL的js代码

    手机平板等移动端适配跳转URL的js代码

    这篇文章主要为大家分享下手机平板等移动端适配跳转URL的js代码,需要的朋友可以参考下
    2014-01-01
  • js 动态加载事件的几种方法总结

    js 动态加载事件的几种方法总结

    本篇文章主要是对js 动态加载事件的几种方法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • pjblog中的UBBCode.js

    pjblog中的UBBCode.js

    pjblog中的UBBCode.js...
    2007-04-04
  • bootstrap中添加额外的图标实例代码

    bootstrap中添加额外的图标实例代码

    可以针对校验状态为输入框添加额外的图标。接下来通过本文给大家分享bootstrap中添加额外的图标实例代码,需要的的朋友参考下吧
    2017-02-02
  • 如何使用JS获取IE上传文件路径(IE7,8)

    如何使用JS获取IE上传文件路径(IE7,8)

    本篇文章是对使用JS获取IE上传文件路径的实现代码进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • JavaScript中的各种宽高属性的实现

    JavaScript中的各种宽高属性的实现

    这篇文章主要介绍了JavaScript中的各种宽高属性的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • JavaScript判断DOM何时加载完毕的技巧

    JavaScript判断DOM何时加载完毕的技巧

    处理HTML DOM文档存在一个难题是,JavaScript可以在DOM完全加载之前执行,这会给你的代码引发不少的潜在问题;针对这个问题,本文给予适当的解决方法,仅供参考
    2012-11-11

最新评论