HTML Web Worker和Jquery Ajax调用

时间:2011-01-29 19:12:10

标签: jquery ajax html5 web-worker

我想知道我是否可以在web worker文件中使用jQuery。谷歌浏览器给了我这个错误:“未捕获的ReferenceError:$未定义”。

这是代码: 父文件:

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) {

    }
  });
}

请帮助,谢谢:)

6 个答案:

答案 0 :(得分:38)

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

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

并且,导入外部脚本不会通过带有script标记的页面进行操作:在工作文件中使用importScripts()

答案 1 :(得分:23)

这是我发现的:

  

您可以将外部脚本文件或库加载到具有的   importScripts()功能。

http://www.html5rocks.com/en/tutorials/workers/basics/#toc-enviornment-loadingscripts

importScripts('script1.js');
importScripts('script2.js');

importScripts('script1.js', 'script2.js');

虽然,你无法加载jQuery,因为jQuery需要DOM访问权限,而网络工作者则没有。

答案 2 :(得分:4)

由于Web worker位于外部文件中,因此他们无权访问以下JavaScript对象:

  • 窗口对象
  • 文档对象
  • 父对象

所以你不能在工作文件中使用$。更好的是你可以使用像这样的传统AJAX

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

参考http://www.w3schools.com/html/html5_webworkers.asp

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

jQuery主要用于处理DOM和处理网页。因此,它不适合无法访问DOM的Web Workers。

您可能希望使用实用程序库而不是DOM库,例如underscore.js,或者可能有人应该创建一个jQuery Worker库,一个没有所有DOM操作功能的jQuery的简化版本,只保留效用函数。

答案 5 :(得分:1)