到 Web 服务的 XMLHttpRequest 在 Web Worker 中不起作用

2024-02-16

如果从主 javascript 调用,下面的代码可以完美运行,但它不会在 Web Worker 中运行。

  function getSpecData(detailLvl, startWeek, endWeek, mkt) {
        var params = { "detailLvl": detailLvl, "startWeek": startWeek, "endWeek": endWeek, "mkt": mkt };
        var xhr;
        var url = "WebServices/wsSProgress.asmx/GetSpecProgressTable";
        try {
            xhr = new XMLHttpRequest();
            xhr.open('POST', url, false);
            xhr.setRequestHeader('Content-Type', 'application/json');
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var result = JSON.parse(xhr.responseText);
                    $('#specProgTbl').html(result.d);
                }
            };
            xhr.send(JSON.stringify(params));
        } catch (e) {
            alert('Error occured in XMLHttpRequest: ' + xhr.statusText + '  ReadyState: ' + xhr.readyState + ' Status:' + xhr.status);
        }
    }


Web Worker 代码中的唯一区别是它使用 postMessage 返回结果:

<script id="worker" type="javascript/worker">

    self.onmessage = function (e) {
        var data = e.data;
        //self.postMessage(data.mkt + " " + data.detailLvl + " " + data.refreshMin + " " + data.isRotate +" "+data.weekNum);

        var startWeek=data.weekNum-3;
        var endWeek=data.weekNum;
        self.postMessage(getSpecData(1,startWeek,endWeek,data.mkt));

    }; 
    function getSpecData(detailLvl, startWeek, endWeek, mkt) {
        self.postMessage('DetailLvl '+detailLvl+' Start '+startWeek+' End '+endWeek+' Mkt '+mkt); 
        var params = { "detailLvl": detailLvl, "startWeek": startWeek, "endWeek": endWeek, "mkt": mkt };
        var xhr;
        var url = "WebServices/wsSpecProgress.asmx/GetSpecProgressTable";
        try {
            xhr = new XMLHttpRequest();
            xhr.open('POST', url, false);
            xhr.setRequestHeader('Content-Type', 'application/json');
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var result = JSON.parse(xhr.responseText);
                    self.postMessage(result.d);
                }
            }; 
            xhr.send(JSON.stringify(params));
        } catch (e) {
            self.postMessage('Error occured in XMLHttpRequest: ' + xhr.statusText + '  ReadyState: ' + xhr.readyState + ' Status:' + xhr.status);
        }
    }

</script>


启动worker的主要javascript:

  $(function initialize() {
        $('#options').hide();
        $("[id$='btnViewOpt']").val("View Options");
        var mkt = $("[id$='lstMkt'] :selected").text();
        var detailLvl = $("[id$='lstDetailLvl'] :selected").val();
        var refreshMin = $("[id$='lstRefresh'] :selected").val();
        var isRotate = $("[id$='chkRotate']").is(":checked");

        var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;
        window.URL = window.URL || window.webkitURL;
        if (BlobBuilder) {
            var bb = new BlobBuilder();
            bb.append(document.querySelector('#worker').textContent);
            wUrl = window.URL.createObjectURL(bb.getBlob());
            worker = new Worker(wUrl);
            alert("Web worker started");
            worker.addEventListener('message', dispMsg, false);
            worker.addEventListener('error', onError, false);
            worker.postMessage({ 'mkt': mkt, 'detailLvl': detailLvl, 'refreshMin': refreshMin, 'isRotate': isRotate, 'weekNum': getCurrentWeekNumber() }); // Start the worker.
        }
        else
            alert("Your browser does not support web workers");
 });

  function onError(e) {
        alert('ERROR in WebWorker: Line ' + e.lineno + ' in ' + e.filename + ': ' + e.message);
    }
    function dispMsg(e) {
        alert("Message from worker: " + e.data);
        $('#specProgTbl').html(e.data);

    }



Web Worker 启动并且参数正确,但是result.d 未定义。 catch 没有 statusText,只是就绪状态=0 and status=0.

这是什么妖术???



UPDATE

xhr.responseText如果从主 Javascript 调用是:

   {"d":"\u003ctable border=\u00271px\u0027 cellpadding=\u00275\u0027 cellspacing=\u00270\u0027\u003e\u003ctr height=\u002710\u0027 \u003e\u003cth height=\u002710\u0027 colspan=\u002712\u0027\u003ePAS\u003c/th\u003e\u003c/tr\u003e\u003ctr height=\u002710\u0027 \u003e\u003ctd align=\u0027center\u0027 width=\u0027200\u0027\u003eManufacturer\u003c/td\u003e\u003ctd align=\u0027center\u0027 width=\u0027150\u0027\u003eMake\u003c/td\u003e\u003ctd align=\u0027center\u0027 width=\u0027100\u0027\u003eNoSpec W22\u003c/td\u003e\u003ctd align=\u0027center\u0027 width=\u0027100\u0027\u003eComplete% W22\u003c/td\u003e\u003ctd align=\u0027center\u0027 width=\u0027100\u0027\u003eNoSpec W23\u003c/td\u003e\u003ctd align=\u0027center\u0027 width=\u0027100\u0027\u003eComplete% W23\u003c/td\u003e\u003ctd align=\u0027center\u0027 width=\u0027100\u0027\u003eNoSpec W24\u003c/td\u003e\u003ctd align=\u0027center\u0027 width=\u0027100\u0027\u003eComplete% W24\u003c/td\u003e\u003ctd align=\u0027center\u0027 width=\u0027100\u0027\u003eNoSpec W25\u003c/td\u003e\u003ctd align=\u0027center\u0027 width=\u0027100\u0027\u003eComplete% W25\u003c/td\u003e\u003ctd align=\u0027center\u0027 width=\u0027100\u0027\u003eNoSpec W26\u003c/td\u003e\u003ctd align=\u0027center\u0027 width=\u0027100\u0027\u003eComplete% W26\u003c/td\u003e\u003c/tr\u003e\u003ctr height=\u002710\u0027 \u003e\u003ctd align=\u0027left\u0027  class=\u0027default\u0027  height=\u002710\u0027 \u003eAAD\u003c/td\u003e\u003ctd align=\u0027left\u0027  class=\u0027default\u0027  height=\u002710\u0027 \u003eCHERY\u003c/td\u003e\u003ctd align=\u0027left\u0027 class=\u0027noSpecSame\u0027  height=\u002710px\u0027 \u003e0\u003c/td\u003e\u003ctd align=\u0027center\u0027  class=\u0027percSame\u0027  height=\u002710\u0027 \u003e\u003cdiv style=\u0027background-image: linear-gradient(left , rgba(8,68,250,1) 18%, rgba(240,241,250,1) 92%, rgba(240,241,250,0) 8%);background-image: -o-linear-gradient(left , rgba(8,68,250,1) 18%, rgba(240,241,250,1) 92%, rgba(240,241,250,0) 8%);background-image: -moz-linear-gradient(left , rgba(8,68,250,1) 18%, rgba(240,241,250,1) 92%, rgba(240,241,250,0) 8%);background-image: -webkit-linear-gradient(left , rgba(8,68,250,1) 18%, rgba(240,241,250,1) 92%, rgba(240,241,250,0) 8%);background-image: -ms-linear-gradient(left , rgba(8,68,250,1) 18%, rgba(169,199,245,1) 92%, rgba(240,241,250,0) 8%);background-image: -webkit-gradient(linear,left bottom,right bottom,color-stop(0.18, rgba(8,68,250,1)),color-stop(0.92, rgba(240,241,250,1)),color-stop(1, rgba(240,241,250,0)));\u0027\u003e92\u003c/div\u003e\u003c/td\u003e\u003ctd align=\u0027left\u0027 class=\u0027noSpecSame\u0027  height=\u002710\u0027 \u003e0\u003c/td\u003e\u003ctd align=\u0027center\u0027  class=\u0027percSame\u0027 height=\u002710\u0027 \u003e\u003cdiv style=\u0027background-image: linear-gradient(left , rgba(8,68,250,1) 18%, rgba(240,241,250,1..............."}

好吧,我在这里真的很蠢。我得到的原因

 DOMException: INVALID_STATE_ERR


是因为根据W3文档 http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/ the xhr.状态属性抛出异常,如果xhr.readyState具有无效值:

    Exceptions on retrieval
    DOMException  INVALID_STATE_ERR exception SHOULD be raised if this attribute is accessed when readyState has an inappropriate value. 


我有一个无效的xhr.readyState因为我没有指定我正在调用的 Web 服务的完整路径。这需要 Web 服务的完整路径因为 webworker 运行在单独的斑点文件创建“即时”。

无论如何,下面是带有工作 Web 服务调用脚本的 webwoker 代码:

<script id="worker" type="javascript/worker">

    self.onmessage = function (e) {
        var param = e.data;
        var url="http://localhost:54071/WebServices/wsSProgress.asmx/GetSpecProgressTable";
        var data=getSpecData(param.detailLvl,param.startWeek,param.endWeek,param.mkt,url)
        self.postMessage(data);
    }; 
    function getSpecData(detailLvl, startWeek, endWeek, mkt, url) {
        var params = { "detailLvl": detailLvl, "startWeek": startWeek, "endWeek": endWeek, "mkt": mkt };
        var xhr;
        try {
            xhr = new XMLHttpRequest();
            xhr.open('POST', url, false);
            xhr.setRequestHeader('Content-Type', 'application/json');
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var result = JSON.parse(xhr.responseText);
                    self.postMessage(result.d);
                }
            }; 
            xhr.send(JSON.stringify(params));
        } catch (e) {
            self.postMessage('Error occured in XMLHttpRequest: ' + xhr.statusText + '  ReadyState: ' + xhr.readyState + ' Status:' + xhr.status + ' E: ' +e+' Msg:'+e.message);
        }
    }
    </script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

到 Web 服务的 XMLHttpRequest 在 Web Worker 中不起作用 的相关文章

  • Perl:HTTP::微小删除留下损坏的锚标记

    我编写了一个脚本 该脚本收集从数据库读取的缓冲区内的所有 URL 检查该页面是否仍然存在 并使用 HTTP Tiny 从缓冲区中删除 URL 如果该 URL 无法访问或返回无效 问题是 HTTP Tiny 删除左锚标记 例如此处无效的文本
  • html css 下拉菜单

    这是我第一次在 Stack Overflow 上发帖 我不熟悉论坛发帖规定 所以请让我知道我做错了什么 我在论坛中研究过这个问题 但我所遇到的一切都没有给我明确的答案 我试图从 新闻 元素创建一个下拉菜单 但在运行代码时我从未得到任何可见的
  • 获取点击的的DOM路径

    HTML div class lol a class rightArrow href a div 伪代码 rightArrow click function rightArrowParents this dom dom is the pse
  • Django - 提交具有同一字段多个输入的表单

    预警 我对 Django 以及一般的 Web 开发 非常陌生 我使用 Django 托管一个基于 Web 的 UI 该 UI 将从简短的调查中获取用户输入 通过我用 Python 开发的一些分析来提供输入 然后在 UI 中呈现这些分析的可视
  • 引导行之间的垂直间距

    所以我正在研究布局 为了 响应能力 我决定使用 Bootstrap 现在我猜网格系统有问题 我想要的结果如下 1 4 2
  • 计算文本选择的 xy 位置

    我正在尝试使用 DOM 元素创建自己的文本选择 是的 我的意思是当您在此元素中选择文本时 您会在文本后面看到蓝色背景 这个想法是停止默认行为 蓝色 并使用我自己的元素来完成工作 方法是找到选择的 xy 位置 然后放置绝对定位的元素 我希望能
  • 禁用特定 div 上的 Tab 键

    我有以下结构 div div Some content div div Some content div div 我想 禁用 div2 上的 tab 键 我的意思是按下 tab 键时 div2 的元素不会获得焦点 有没有简单的方法可以使用
  • 元素和 svg 形状之间的白线

    大家好 我正在使用由 shapedivider 生成的 svg 整形器 您可以看到 有一条白线 我不知道为什么它在那里以及如何删除它 请你帮助我好吗 有形状分隔符的代码 custom shape divider bottom 1640714
  • HTML 属性 bgcolor 已弃用:用什么代替?

    VStudio ASP NET 给出以下消息 Attribute bgcolor is considered outdated A newer construct is recommended 推荐的结构是什么 bgcolor是在一个 td
  • 从 html 属性中删除单引号和双引号,并且除 href 和 src 之外的所有属性上都没有空格

    我正在尝试从 html 属性中删除单引号和双引号 这些属性是没有空格的单个单词 我写了这个有效的正则表达式 type title data toggle colspan scope role media name rel id class
  • JavaScript 中带前导零的数字发生变化

    我使用 print 语句从 php 调用 javascript 函数来打印 html 代码 并且传入一个整数 但是 在 php 中传递的值与 javascript 函数接收到的数字不匹配 我不知道为什么 这是调用 javascript 函数
  • 如何使用文件输入在PDFJS中打开本地PDF?

    我想知道是否有办法使用选择pdf文件input type file 并使用打开它PDFJS https github com mozilla pdf js 您应该能够使用 FileReader 来获取文件对象的内容作为类型化数组 pdfjs
  • 在iOS上,“添加到主页”缓存保存在哪里,如何清除它?

    我正在 iPad iOS v7 上制作一个 html5 游戏 当我将其添加到主页时 它非常顽固地释放缓存 如果我在 Safari 中查看它 这会按照您所期望的方式工作 如果我刷新一次或两次 页面就会以最新状态缓存 但在主页上却是另一回事 它
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • 如何处理 Django 中的错误

    我想让我的 django 应用程序尽可能对用户友好 并且我想处理适当的错误并让它推出类似于 javascript 中的警报的错误消息 我想在没有上传文件时执行此操作 因此 当按下上传按钮并且尚未上传任何内容时 将会发出一条警报消息 我的看法
  • 设置双指缩放时精确的滚动位置

    我正在创建一个地图应用程序 它将标记图像放置在画布上并滚动到它 我正在使用浏览器的捏缩放和滚动来放大 缩小地图 然而 我注意到有一些奇怪的行为 我想知道如何解决它 这有点难以解释 但我们开始吧 假设您处于网页的标准缩放级别 无法进一步缩小
  • 如何转义 HTML 字符?在.NET中-->“

    如何在 NET 中转义 HTML 字符 我正在从 json 字符串中获取 html 并在标题中得到 amp quot more text 看起来我需要做两次才能得到 amp quot 成为 quot 那么它就是一个 如何转义 NET 中的所
  • 如何通过 jQuery 中的类获取特定 html 元素的innerHTML?

    我有这样的 HTML 代码 div class a html value 1 div div class a html value 2 div 我怎样才能访问html value 1 and html value 2使用jquery 分别地
  • 适用于移动设备的响应式订单确认电子邮件?

    我从未见过令人惊叹的订单确认 发票电子邮件 即使是最好的 html5 网站也会发送糟糕的订单确认电子邮件 有时是纯文本 我相信这是因为发票通常需要使用表格来显示购买的物品 这在移动设备上实现起来非常困难 我发现了一些让手机上的表格更易于管理
  • Bootstrap 导航栏与 Google 位置重叠自动完成下拉菜单

    我有一个导航栏 我试图在其中添加一个地点搜索框 除了谷歌位置提示框的一小部分被导航栏重叠 如下图所示 之外 一切几乎都有效 我尝试过改变z index输入框的值改为10或2000或90000但似乎没有效果 我还缺少其他需要做的事情吗 这是

随机推荐

  • 为什么我的 postgres 表在更新后变得更大?

    我有一个表 聚集在两列上 销售点和产品 ID 唯一的索引位于这两列中 并且表聚集在这些列上 我每周都会更新表中的其他列 当我这样做时 表和关系的大小增加了大约 5 倍 然后 我对表进行聚类 大小恢复到更新前的大小 这对我来说似乎很奇怪 如果
  • 根据与 dplyr 的部分匹配替换数据框中任意位置的整个字符串

    我正在努力寻找合适的 dplyr 代码来使用grepl或等效的方法来替换整个数据帧中的值 即 任何包含 mazda 的单元格都应将其全部内容替换为新字符串 A car 经过大量在线搜索后 我最接近的是 重点是将其应用于所有列 library
  • 构建我的项目时 Xcode 10 beta 错误?

    我将 Xcode 更新到 10 beta 之后 当我构建时 我收到以下构建失败错误 访问构建数据库 Users n Library Developer Xcode DerivedData Build Intermediates XCBuil
  • 通过 python SDK 获取 Azure 安全中心警报

    我想使用 python SDK 列出 azure 安全中心警报 我找到了这个包 https pypi org project azure mgmt security https pypi org project azure mgmt sec
  • 我可以使用 file_get_contents() 来比较两个文件吗?

    我想同步两个目录 我用 file get contents source file get contents dest 比较两个文件 这样做有什么问题吗 我宁愿做这样的事情 function files are equal a b Chec
  • Tensorflow:没有为任何变量提供梯度

    我是新来的tensorflow我正在构建一个网络 但无法计算 应用它的梯度 我收到错误 ValueError No gradients provided for any variable None tensorflow python ops
  • 使用 group by 和 sum 在 python 中绘图

    我正在尝试使用以下数据绘制图表 我需要图表 Year 与 Txns 原始数据即代码中的dataset1 WeekDay Day Month Year Time Txns 1 5 1 2015 3 1 1 5 1 2015 4 4 1 5 1
  • 改造 需要一个字符串,但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT

    我试图只获取字符串请求 但它给出了这样的错误 Expected BEGIN ARRAY but was BEGIN OBJECT at line 1 column 2 path 我的 API 输出是这样的 status true messa
  • 如何在 Swift 4 中使用函数柯里化

    我试着去理解函数柯里化教程 https robots thoughtbot com introduction to function currying in swift但该代码似乎已经过时了 关于函数柯里化仍然不太清楚 我尝试使用这个功能
  • 如何将打印对话框添加到printpreviewdialog?

    我的老板要我创建具有打印功能的窗口窗体 但他想要打印datagridview预览后 所以现在我鼓励这个问题 我无法打印多套纸张或选择打印机或在单击打印按钮时进行任何更改printpreviewdialog 当我点击按钮时 它会直接打印纸张
  • 在 .NET 中使用 MySQL GeoSpatial 数据类型

    我正在寻找有关如何在 NET 中使用 MySQL 几何类型的信息 我使用 Sub sonic 进行 ORM 并且实际上不需要支持比 MySQL 的 POINT 类型更多的内容 MySQL NET 连接器似乎以 OpenGIS WKB 格式的
  • r 管道 image_annotate 无法按预期工作

    我正在尝试使用magick从一堆图像创建一个动画 gif 它工作得很好 但我想在创建 gif 之前为每个图像注释文本 基本上是文件名 但这不起作用 我找不到错误的原因 如下 不确定是管道符号 映射函数还是其他原因 library purrr
  • 如何在 Windows 7 上安装 SIP 和 PyQT

    我是 Python 环境的新手 在我的 Win 7 机器上安装 SIP 和 PyQt 真的很困难 这就是我到目前为止所做的 我已经下载了SIP 4 16 9 https riverbankcomputing com software sip
  • 如何覆盖 Azure Web App 自定义部分中的 web.config 值?

    在 Azure Web App 中可以轻松覆盖 web config AppSettings 部分 例如 如果我有以下 web config
  • React-redux:如何编写集成测试

    我在用Enzyme测试我的反应和还原部分 我阅读了周围的内容 发现为组件编写集成测试也是一个很好的做法 所以 这很简单 因为我必须调用操作创建者并根据存储检查它们的更新值 但我有一些返回的异步操作dispatch行动 登录 actions
  • 调整浏览器窗口大小时调整网格大小

    我用了一个填满整个窗口 http mleibman github com SlickGrid examples example12 fillbrowser html作为默认示例 尝试调整浏览器窗口的大小 但是用于网格的区域是相同的 需要重新
  • 如何从AccessibilityNodeInfo获取webview

    我正在创建一个需要使用 AccessibilityService 的应用程序 并且获取其他应用程序的窗口内容也是没有问题的 我已从窗口内容中检测到所有可用的子项 并且该子项显示在 AccessibilityNodeInfo 中 现在我在 A
  • log4net 每次运行一个文件

    我需要我的应用程序在每次运行时创建一个日志文件 我的首选格式是App log yyyy MM dd HH mm ss 如果那不可能 我会满足App log yyyy MM dd counter 这是我当前的附加程序配置
  • 最值得一读的Python模块

    我已经学习Python有一段时间了 我对其特性有了很好的了解 但我想改进我的编码风格 我认为阅读 Python 模块的源代码是个好主意 有谁可以特别推荐一下吗 相关主题 寻找美观且具有指导意义的 Python 代码的初学者 https st
  • 到 Web 服务的 XMLHttpRequest 在 Web Worker 中不起作用

    如果从主 javascript 调用 下面的代码可以完美运行 但它不会在 Web Worker 中运行 function getSpecData detailLvl startWeek endWeek mkt var params deta