HTML Web Worker and Jquery Ajax call

后端 未结 6 1199
夕颜
夕颜 2020-11-30 06:19

I\'m wondering if I can use jQuery inside the web worker file. Google Chrome gives me this error: \"Uncaught ReferenceError: $ is not defined\".

Here is the code: Th

相关标签:
6条回答
  • 2020-11-30 06:50

    take a look on this plug-in https://github.com/rwldrn/jquery-hive

    0 讨论(0)
  • 2020-11-30 06:51

    Since web workers are in external files, they do not have access to the following JavaScript objects:

    • The window object
    • The document object
    • The parent object

    So you can't use $ inside worker file. Better you can use traditional AJAX something like this

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

    Reference at http://www.w3schools.com/html/html5_webworkers.asp

    0 讨论(0)
  • 2020-11-30 06:51

    The execution environment in Node.JS also lacks a native DOM implementation. I think it's fair to say that Node.JS and HTML5 Web Workers share certain restrictions.

    There are ways to simulate a DOM implementation for the purpose of using jQuery in Node.JS. If you still want to use jQuery in Web Workers, I think you should search for the Node.JS solutions and see if they apply.

    0 讨论(0)
  • 2020-11-30 07:00

    No you cannot. There's no access to non-thread safe components or the DOM and you have to pass specific data in and out of a thread through serialized objects. So you have to work really hard to cause problems in your code. jQuery is a JavaScript DOM library.

    But you can use a native XMLHttpRequest in your worker however.

    And, importing external scripts does not go via the page with a script tag : use importScripts() for that in your worker file.

    0 讨论(0)
  • 2020-11-30 07:10

    jQuery is mostly for working with the DOM and working with web pages. So it is not so suitable for Web Workers that do not have access to the DOM.

    You might want to use a utility library instead of a DOM library, such as underscore.js, or perhaps someone ought to make a jQuery Worker library, a stripped down light version of jQuery without all the DOM manipulation functionality, just keeping the utility functions.

    0 讨论(0)
  • 2020-11-30 07:15

    Here's what I found:

    You can load external script files or libraries into a worker with the importScripts() function.

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

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

    or

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

    Although, you cannot load jQuery, because jQuery requires DOM access, which web workers don't have.

    0 讨论(0)
提交回复
热议问题