我正在尝试创建一个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中的$
答案 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}}