跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端

JavaScript 进度事件详解

JavaScript XHR 进度事件用于监控客户端与服务器端的通信状态,包含 loadstart、progress、error、abort、load 及 loadend 六个核心事件。load 事件在响应接收完成后触发,简化了状态检查流程;progress 事件在数据传输期间反复触发,提供字节数信息以构建进度条。开发者需在调用 open() 前绑定处理程序,并注意跨浏览器兼容性,通过监听这些事件可有效提升用户交互体验。

云间运维发布于 2024/4/21更新于 2026/10/2587 浏览
JavaScript 进度事件详解

JavaScript 进度事件

Progress Events 定义了客户端与服务器端通信的进度监控机制。这些事件最初针对 XMLHttpRequest (XHR),现已推广到其他类似 API。主要包含以下 6 个进度相关事件:

  • loadstart:在接收到响应的第一个字节时触发。
  • progress:在接收响应期间反复触发。
  • error:在请求出错时触发。
  • abort:在调用 abort() 终止连接时触发。
  • load:在成功接收完响应时触发。
  • loadend:在通信完成时,且在 error、abort 或 load 之后触发。

每次请求都会首先触发 loadstart 事件,之后是一个或多个 progress 事件,接着是 error、abort 或 load 中的一个,最后以 loadend 事件结束。

load 事件

Firefox 最初在实现 XHR 时致力于简化交互模式,增加了一个 load 事件用于替代 readyState 检查。load 事件在响应接收完成后立即触发,无需检查 readyState 属性。onload 事件处理程序会收到一个 event 对象,其 target 属性设置为 XHR 实例,可以访问所有 XHR 对象属性和方法。不过,并不是所有浏览器都实现了这个事件的 event 对象。考虑到跨浏览器兼容,建议像下面这样使用 XHR 对象变量:

let xhr = new XMLHttpRequest();
xhr.onload = function() {
  if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
    alert(xhr.responseText);
  } else {
    alert("Request was unsuccessful: " + xhr.status);
  }
};
xhr.open("get", "altevents.php", true);
xhr.send(null);

只要是从服务器收到响应,无论状态码是什么,都会触发 load 事件。这意味着还需要检查 status 属性才能确定数据是否有效。Firefox、Opera、Chrome 和 Safari 都支持 load 事件。

progress 事件

Mozilla 在 XHR 对象上的另一个创新是 progress 事件,在浏览器接收数据期间,这个事件会反复触发。每次触发时,onprogress 事件处理程序都会收到 event 对象,其 target 属性是 XHR 对象,且包含 3 个额外属性:lengthComputable、position 和 totalSize。其中,lengthComputable 是一个布尔值,表示进度信息是否可用;position 是接收到的字节数;totalSize 是响应的 Content-Length 头部定义的总字节数。有了这些信息,就可以给用户提供进度条了。以下代码演示了如何向用户展示进度:

let xhr = new XMLHttpRequest();
xhr.onload = function(event) {
  if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
    alert(xhr.responseText);
  } else {
    alert("Request was unsuccessful: " + xhr.status);
  }
};
xhr.onprogress = function(event) {
  let divStatus = document.getElementById("status");
  if (event.lengthComputable) {
    divStatus.innerHTML = "Received " + event.position + " of " + event.totalSize + " bytes";
  }
};
xhr.open("get", "altevents.php", true);
xhr.send(null);

为了保证正确执行,必须在调用 open() 之前添加 onprogress 事件处理程序。在前面的例子中,每次触发 progress 事件都会更新 HTML 元素中的信息。假设响应有 Content-Length 头部,就可以利用这些信息计算出已经收到响应的百分比。

目录

  1. JavaScript 进度事件
  2. load 事件
  3. progress 事件

更多推荐文章

查看全部
  • 2025 年睿抗机器人开发者大赛 CAIP-编程技能赛本科组国赛解题报告
  • OpenStack 版本发布周期与系列概览
  • 2026 年 3 月全球 AI 前沿动态:模型、智能体与基础设施
  • 注意力机制与 Transformer 模型实战
  • HTML5+CSS3+JavaScript 实现高木同学圣诞树 GalGame 开发
  • Java 后端 Web API 开发实战:从架构到部署
  • OpenCV 形态学操作与乐谱线条提取
  • FPGA 嵌入式块存储器 RAM:原理与实现指南
  • Linux 系统编程:封装基础文件操作库与理解标准错误流 stderr
  • WebView 技术详解:原理、场景与性能安全挑战
  • OpenClaw 跨平台 AI 助手完全使用指南:从入门到进阶
  • CosyVoice 安装 openai-whisper 报错 ModuleNotFoundError: No module named'pkg_resources'
  • C++ 多态底层实现机制深度解析
  • Aspen 15.0 升级亮点:AI 建模与绿氢适配的流程模拟功能解析
  • 普通人成为黑客的十个基础学习步骤
  • 分布式文件系统 HDFS 核心概念详解:块、名称节点与数据节点
  • Selenium Web 自动化测试入门与实战指南
  • 知网 AIGC 检测原理与降重处理指南
  • GitHub Copilot Agent 模式实战指南与避坑建议
  • FPGA 视频 4 分屏系统架构详解

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online