使用webworkers,jquery返回undefined

时间:2018-01-23 18:28:21

标签: javascript jquery ajax web-worker

我正在尝试创建一个webworker,它将每隔n ms从服务器获取一些东西作为poc,用于我需要的东西。但我有一个问题,我正在尝试在我的webworker中使用$ .ajax,即使我在html文件中定义了jquery,它也会说$未定义,我不知道我究竟能使用jquery在我的worker.js文件中。我认为主要的问题是,当我创建一个工作者时,我将文件指定为“new Worker("worker.js");”,我认为这与jquery混淆,所以jquery与我的工作者js没有关系。我可能弄错了。我不知道我究竟能解决这个问题。

这是我的html文件:

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="worker.js"></script>
</head>
<body>

<p>output: <output id="result"></output></p>
<button onclick="worker()">Start Worker</button>

<script>
var w;

function worker() {
        w = new Worker("worker.js");
        w.onmessage = function(event) {
            document.getElementById("result").innerHTML = event.data;
        };
}
</script>

</body>
</html>

我并不需要在我的标题中引用worker.js,我只是想检查一下是否添加它会有什么不同,但事实并非如此。

这是我的工人:

var i = 0;

function someAjax (){
    $.get("https://httpbin.org/get", function(data, status){
        return data;
    });
}
function doSomething() {
    var test = someAjax();
    postMessage(test);
    setTimeout("doSomething()",500);
}

doSomething();

工作人员的网站是我在网上发现的一个随机网站来测试网络服务,在我身边我正在查询我的本地主机。

我收到的消息是ReferenceError: $ is not defined所以我正在寻找一种方法来获取我的worker.js中的$

1 个答案:

答案 0 :(得分:1)

默认jQuery脚本无法在WorkerGlobalScope个帖子中使用,因为WorkerGlobalScope没有document,当TypeError.createElement()时,会导致fetch()在jQuery中调用。您也可以在Worker主题中使用postMessage()。正如@epascarello所述,在.then()处理程序中调用var i = 0; function someAjax () { // note `return` statement return fetch("https://httpbin.org/get") .then(response => response.text()) .catch(err => { throw err }) } function doSomething() { var test = someAjax(); someAjax().then(test => { postMessage(test); setTimeout("doSomething()",500); }) // handle error here .catch(err => console.error(err)) } doSomething(); 以将数据发布到主线程

{{1}}