使用Blob WebWorker发送同步XMLHttpRequest

时间:2014-06-25 14:18:17

标签: javascript multithreading web-services xmlhttprequest web-worker

首先,我是Web服务,Web工作者和XMLHttpRequests的新手,所以请耐心等待。此外,我的项目中有很多规定,因此解决方案只需这样做即可。"可能不可行。

所以我设置了一个Web服务来接收来自javascript中的XMLHttpRequest的调用,并且它同步执行此操作。这工作正常,但它绑定了UI线程,我希望在向服务器发出请求时运行加载微调器。由于一个问题,我无法让程序访问Web上的外部脚本,因此我使用Blob来掩盖" file://"前言

我也使用内联webworker来完成此任务。现在我要解决我的实际问题。产生webworker很好,我可以创建并发送XMLHttpRequest,但是只要我打电话给"发送"一切都存在。在此之后它将不运行任何代码行。

以下是一些代码:

来自JS:

var blob = new Blob([document.querySelector('#getWorker').textContent]);

var blobUrl = window.URL.createObjectURL(blob);

var worker = new Worker(window.URL.createObjectURL(blob));
worker.onmessage = function (e) {
    alert(e.data);
}
worker.postMessage();

工人:

var bigString = "";

var invocation = new XMLHttpRequest();
var url = 'http://<ipAddress>/<serviceName>/Service.asmx/<method>';

if (invocation) {
    invocation.open('GET', url, false);
    invocation.send();   //*****EXITS AFTER THIS LINE*****//
    if (invocation.status == 200) {
            var responseText = invocation.responseText.replace(/(\r\n|\n|\r)/gm, "");
            responseText = responseText.replace('<?xml version="1.0" encoding="utf-8"?>', '');
            responseText = responseText.replace('<string xmlns="http://tempuri.org/">', '');
            responseText = responseText.replace('</string>', '');

            postMessage("Success");
            //updateTable(responseText);
        } else {
            postMessage("Fail");
            //alert("Could not connect to database. Check your internet connection.");
        }
    var c = 0;
    var b = 1;
}

var q=1;

调试器将在&#34; invocation.send()&#34;之后结束。线。没有错误,没有状态,没有任何东西。那就是我迷失的地方。

非常感谢任何见解。此外,这个确切的代码在不在WebWorker中的情况下有效,因此可能存在一些我不理解的内容。

提前致谢!

1 个答案:

答案 0 :(得分:0)

Chrome问题。如果COR请求被阻止,则无提示失败。 Firefox控制台显示有关错误的更多信息。