当前位置: 首页 > news >正文

前端开发攻略---使用AJAX监控网络请求进度

1、XHR实现 

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><progress value="0" max="0"></progress><script>const progress = document.querySelector('progress')function readFile2() {const xhr = new XMLHttpRequest()xhr.open('GET', 'http://127.0.0.1:8888/ttt.txt')xhr.addEventListener('progress', e => {// e.loaded是当前加载大小 e.total是总大小console.log(e.loaded, e.total)progress.setAttribute('value', e.loaded)progress.setAttribute('max', e.total)})// xhr.onload = function () {//   if (xhr.status === 200) {//     console.log('响应内容:', xhr.responseText)//   } else {//     console.error('请求失败,状态码:', xhr.status)//   }// }xhr.send() // 发送请求}readFile2()</script></body>
</html>

2、Fetch实现 

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><progress value="0" max="0"></progress><script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script><script>const progress = document.querySelector('progress')async function readFile() {const url = 'http://127.0.0.1:8888/ttt.txt'const resp = await fetch(url)// 从响应头中获取数据总大小const total = resp.headers.get('content-length')// 更新进度条progress.setAttribute('max', total)// 从响应体中获取一个读取器(reader),允许你逐块读取响应的数据流。const reader = resp.body.getReader()// 创建一个 TextDecoder 实例,用于将读取到的字节数据转换为文本字符串。const decoder = new TextDecoder()// 用来存储当前加载的大小let loaded = 0while (1) {// 使用 reader.read() 异步读取下一块数据。value 是读取到的字节,done 是一个布尔值,指示是否已读取到流的末尾。const { value, done } = await reader.read()if (done) breakloaded += value.length// 更新进度条progress.setAttribute('value', loaded)// 将读取到的字节(value)解码为字符串格式。// const text = decoder.decode(value)}}readFile()</script></body>
</html>

http://www.lryc.cn/news/460832.html

相关文章:

  • [已解决]DockerTarBuilder永久解决镜像docker拉取异常问题
  • 机器学习实战27-基于双向长短期记忆网络 BiLSTM 的黄金价格模型研究
  • 阿拉伯应用市场的特点
  • 音频响度归一化 - python 实现
  • 嵌入式硬件设计详解
  • Linux防火墙与SElinux
  • 【MySQL】基本查询(上):创建、读取
  • 在线刷题系统测试报告
  • 即时通讯增加Redis渠道
  • C++list
  • 设计模式 - 结构型
  • STM32编码器接口
  • 2024客户世界年度大会开幕,码号卫士赋能数字运营服务新升级
  • AcWing 802. 区间和(离散化算法,python)
  • 【网页设计】CSS 盒子模型
  • 如何通过构建对应的api服务器使Vue连接到数据库
  • 新手给视频加字幕的方法有哪些?4种加字幕方法推荐!
  • Oracle实际需要用到但常常被忽略的函数
  • 代码随想录算法训练营Day23
  • vue使用table实现动态数据报表(行合并)
  • YARN调度原理详解
  • Go-知识泛型
  • Qt 如何 发送与解析不定长报文以及数组不定长报文
  • Rust默认使用UTF-8编码来解析源代码文件。如果在代码中包含无法用UTF-8编码表示的字符,编译器会报错!
  • 【jeston】torch相关环境安装
  • [CR]厚云填补_大型卫星影像去云数据集
  • Langchain CharacterTextSplitter无法分割文档问题
  • ros service不走是为什么
  • 量子计算机的原理与物理实现
  • SQL Server 常用关键词语法汇总