2011-01-29 74 views
38

我想知道如果我可以在web工作人员文件中使用jQuery。谷歌浏览器给我这个错误:“未捕获ReferenceError:$未定义”。HTML Web工作者和jQuery的Ajax调用

下面是代码: 父文件:

var loader = new Worker(BASE_URL + "js/rss_loader_worker.js"); 
// Ask the worker to start loading the RSS from the server 
loader.postMessage("loadRss"); 
// When receive the response from the server 
loader.onmessage = function (event) { 
    console.log(event.data); 
} 

工人文件:

onmessage = function (event) { 
    if (event.data === "loadRss") { 
    loadRss(); 
    } 
} 

/** 
* This function handles the AJAX request to the server side 
* then pass the content to the view page 
* @param none 
* @return html text 
*/ 
loadRss = function() { 
    $.ajax({ 
    data: {city: CITY_LOCATION}, 
    url: BASE_URL + "/getfeeds", 
    onsucess: function (data) { 

    } 
    }); 
} 

请帮帮忙,谢谢:)

+0

importScripts( “的jquery.js”)使用传统的AJAX这样的事情

if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } 

参考;无法工作:jQuery使用“窗口”变量,这是网络工作者无法访问的。 但是您可以使用其他库来完成这项工作=) – 2012-02-23 10:19:42

+0

要明确入站搜索者,通过“Worker”运行ajax请求是可能的,而且通常也是有益的。由于`jQuery`是一个DOM操作库,而Web Workers具有一个`WorkerGlobalScope`而不是`Window`,因此不能访问文档或DOM,所以与传统的`jQuery`不同。 – buley 2014-04-01 23:32:15

回答

37

不,你不能。无法访问非线程安全组件或DOM,并且必须通过序列化对象将特定数据传入和传出线程。所以你必须非常努力地在你的代码中导致问题。 jQuery是一个JavaScript DOM库

但是,您可以在工作人员中使用原生XMLHttpRequest

而且,导入外部脚本不会通过带script标记的页面进行:使用importScripts()作为工作程序文件中的脚本。

+0

好的,谢谢你的帮助。现在很清楚。我会找到另一种方式。 – Tri 2011-01-29 19:22:59

2

Node.JS中的执行环境也缺少本地DOM实现。我认为Node.JS和HTML5 Web Workers共享某些限制是公平的。

为了在Node.JS中使用jQuery,有许多方法可以模拟DOM实现。如果您仍然想在Web Workers中使用jQuery,我认为您应该搜索Node.JS解决方案并查看它们是否适用。

1

承担这个看看插件https://github.com/rwldrn/jquery-hive

+0

jQuery配置单元是在jQuery中使用web工作的抽象,而不是其他方式 – thomaux 2012-03-23 08:15:05

+0

此插件现在已过时。它的界面与您在当前jQ中使用的界面不同。 – Samuel 2012-10-31 13:04:44

2

jQuery主要用于处理DOM和使用网页。所以它不适用于无法访问DOM的Web Workers。

您可能需要使用一个实用程序库,而不是一个DOM库,如underscore.js,或者也许有人应该让一个jQuery工人图书馆,剥离下来的jQuery的轻型版本没有所有的DOM操作功能,只需保持实用功能。