AJAX (XMLHttpRequest) 进度监控不适用于 Service Workers

2024-02-13

我想将网络表单转换为离线工作。最初,我会在用户完成每个步骤后将表单信息存储在 Web 服务器上的 SQL 数据库中。其中一个步骤包括上传图像,为此我实现了一个进度条。

添加服务工作者后,我注意到进度条不再起作用(进度条会显示,但永远不会更新以显示已上传的文件量)。我在多个浏览器中进行了测试,以确保这不依赖于浏览器,并且在所有浏览器(chrome、firefox、edge、safari、移动版本)中都有相同的结果。

这是我的 ajax 请求的第一部分。

$.ajax({
    type: "POST",
    url: url,
    datatype: "json",
    data: JSON.stringify(data),
    xhr: function () {
        var xhr = new window.XMLHttpRequest();
        xhr.upload.addEventListener("progress", function (evt) {
            if (evt.lengthComputable) {
                var percentComplete = getCurrentProgress(evt.loaded, evt.total);
                $("#progressBarContainer .progress > .progress-bar").css({ "width": percentComplete + "%" });
                $("#progressBarContainer .progress > .progress-bar .percent-complete").text(percentComplete + "%");
            }
        }, false);

        return xhr;
    }
})

这是我的服务工作人员文件中用于处理获取事件的代码。

self.addEventListener("fetch", event => {
    event.respondWith(
        caches.open(staticCacheName)
            .then(cache => {
                return cache.match(event.request)
                    .then(response => {
                        if (response) {
                            return response;
                        }
                        else {
                            return fetch(event.request);
                        }
                    });
            })
    );
});

我能够找到解决方案,但在 stackoverflow 上找不到这个问题,所以我发布并回答我自己的问题。如果有人有任何改进意见或更好的解决方案,请告诉我。


我找到了答案here https://github.com/w3c/ServiceWorker/issues/1141。我需要做的是让服务人员忽略发布请求。我将我的服务人员代码更新为:

self.addEventListener("fetch", event => {
    //This is the code that ignores post requests
    if (event.request.method === "POST") {
        return;
    }

    event.respondWith(
        caches.open(staticCacheName)
            .then(cache => {
                return cache.match(event.request)
                    .then(response => {
                        if (response) {
                            return response;  //The URL is cached
                        }
                        else {
                            return fetch(event.request);  //Go to the network.
                        }
                    });
            })
    );
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AJAX (XMLHttpRequest) 进度监控不适用于 Service Workers 的相关文章

随机推荐

  • 通过 ParameterizedThreadStart 传递参数

    我正在尝试通过以下方式传递参数 Thread thread new Thread new ParameterizedThreadStart DoMethod 知道如何做到这一点吗 我希望得到一些帮助 懒惰别列佐夫斯基有正确的答案 我想指出的
  • 原生 Android BLE 实现本质上是同步的吗?

    我记得读过 指导和提示 http img developer samsung com contents authCdn ble Guide and Hints for Samsung BLE API pdf gda 1375430976 5
  • 如何加速 VBA 代码

    我有一个带有VBA代码的excel文件 不是我写的 该代码的工作原理是用户在用户表单中输入 6 位数字 然后 VBA 检查另一张工作表 并检查该 6 位数字是否存在于工作表上 如果是 则会更改阶段 但如果没有 则会将此 6 位数字添加到工作
  • 在特定时间后在 Angular JS 中实时更新高图表

    我想在特定时间跨度后在 Angular JS 中实时更新高图表 并且它应该在 html 上得到反映 而无需在 Angular JS 中进行用户交互 下面是控制器 指令和 HTML 的代码 我正在使用 REST Web 服务从后端获取数据 控
  • 使用 waitKey 来暂停和播放视频

    我有一个VideoCapture在 OpenCV 中 我可以成功显示给定的视频 我现在想做的是通过按一个键来暂停和播放 可选哪个键 只要有效即可 我一直在读关于waitKey但有一些关于这整件事我不明白 ASCII 以及如何绑定键 我的理解
  • Nexus 和上传 .NET 应用程序的工件

    Nexus 是否可以用作 NET 应用程序构建输出的工件管理器 我非常了解 Nexus 可以成为出色的 nuget 代理和内部工件管理器 但是我需要 Nexus 在这些库的下游进行操作并存储 TeamCity 构建的输出 我研究过使用 RE
  • 使用泛型类中定义的泛型参数调用非泛型方法

    这是我的问题 public class MyClass
  • 使用亚马逊API获取产品详细信息

    我有以下代码来输出来自亚马逊的商品列表 但我不确定如何访问特定产品 带有 Summery 评论等 任何帮助 将不胜感激
  • 如何使用毕加索的颜色作为占位符图像?

    我想使用毕加索将颜色设置为占位符图像 我试过这个 int placeHolderColor2 Color rgb 20 20 20 Picasso with context load item getImageUrls get 0 plac
  • 如何在 iOS 的 flutter 中将图像流缓冲区转换为 jpeg 图像字节?

    当我们处理相机时flutter 我们用Camera plugin It has startImageStream返回的方法CameraImage cameraImage数据类型 In iOS cameraImage format is bg
  • 检查 DI-Graph 中是否存在任何路径

    如果我有一个有向图 如何检查所有节点对 a b 是否创建路径 Example Input v1 v2 v5 v6 v2 v3 v3 v4 v4 v5 v0 v1 我需要检查该图中是否存在至少一条路径 而无需多次访问每个节点 我已经尝试过回溯
  • 是否可以将参数传递到通过选项卡访问的 FB 应用程序的回调 URL?

    我有这个 Facebook 应用程序 它向粉丝页面添加自定义选项卡 您可以通过以下 URL 访问该选项卡 http www facebook com pages PAGE NAME HERE PAGE ID v APP ID http ww
  • 如何在Python中模拟CPU和内存压力

    我想知道是否有人用 python 编写了模拟 cpu 和内存压力的代码 我看到一段加载 cpu 的代码 但如何强制它们在 90 的使用率下工作 一个节点主要有 4 种经常使用的资源 有效内存 中央处理器周期 储存空间 网络负载 上传和下载
  • 更改 DataMember 的 XML 命名空间

    我有两个DataContract我正在使用 a 序列化为 XMLDataContractSerializer 我为两个不同的指定了不同的命名空间DataContract然而 有一个DataMember每一个DataContract属于相同的
  • HTMLCollection、NodeList 和对象数组之间的区别

    当谈到 DOM 时 我总是对 HTMLCollections 对象和数组感到困惑 例如 有什么区别document getElementsByTagName td and td myTable and td 是对象 jQuery 对象 为什
  • 如何生成一个不以 0 开头且具有唯一数字的随机 4 位数字?

    这几乎可以正常工作 但数字有时以 0 开头 import random numbers random sample range 10 4 print join map str numbers 我找到了很多例子 但没有一个能保证序列不会以0
  • 解析 HTML:成人分类系统

    我正在研究网络上使用的不同且 有时已过时 的评级 分类标准 IE PICS http www w3 org PICS POWDER http www w3 org 2007 powder ICRA http www fosi org icr
  • 为什么 JSON.Parse 说“无效字符”?

    我在 IE 中运行了一段 JS 其中包含以下行 var data JSON parse skill SK AUTO DEV TEST kind IS REQUIRED 谁能告诉我这有什么问题吗 因为这不是有效的 JSON 您需要在属性名称周
  • 两列,100%高度固定流体

    不使用表格如何实现下面的效果呢 例子 http enstar nl example php http enstar nl example php 该示例目前可能不可见 名称服务器应该已更改 但我的主机更新它们的速度不是那么快 今天晚些时候应
  • AJAX (XMLHttpRequest) 进度监控不适用于 Service Workers

    我想将网络表单转换为离线工作 最初 我会在用户完成每个步骤后将表单信息存储在 Web 服务器上的 SQL 数据库中 其中一个步骤包括上传图像 为此我实现了一个进度条 添加服务工作者后 我注意到进度条不再起作用 进度条会显示 但永远不会更新以