40 votes

Travailleur Web HTML et appel Ajax Jquery

Je me demande si je peux utiliser jQuery dans le fichier web worker. Google Chrome me donne cette erreur : "Uncaught ReferenceError : $ is not defined".

Voici le code : Le fichier parent :

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);
}

Le dossier du travailleur :

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

    }
  });
}

Aidez-nous, merci :)

38voto

Caspar Kleijne Points 11850

Non, toi. ne peut pas . Il n'y a pas d'accès aux composants non threadés ou au DOM et vous devez faire entrer et sortir des données spécifiques d'un thread par des objets sérialisés. Vous devez donc travailler très dur pour causer des problèmes dans votre code. jQuery est une bibliothèque JavaScript DOM .

Mais vous pouvez utiliser un XMLHttpRequest dans votre travailleur cependant.

Et, l'importation des scripts externes ne passe pas par la page avec une script tag : utilisation importScripts() pour cela dans votre fichier de travail.

24voto

shershams Points 1036

Voici ce que j'ai trouvé :

Vous pouvez charger des fichiers ou des bibliothèques de script externes dans un worker avec la commande importScripts() fonction.

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

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

o

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

Cependant, vous ne pouvez pas charger jQuery, parce que jQuery nécessite un accès au DOM, ce que les travailleurs web n'ont pas.

4voto

Comme les travailleurs web se trouvent dans des fichiers externes, ils n'ont pas accès aux objets JavaScript suivants :

  • L'objet fenêtre
  • L'objet document
  • L'objet parent

Vous ne pouvez donc pas utiliser $ dans un fichier worker. Mieux vaut utiliser l'AJAX traditionnel, comme ceci

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

Référence à http://www.w3schools.com/html/html5_webworkers.asp

2voto

jokeyrhyme Points 354

L'environnement d'exécution de Node.JS manque également d'une implémentation DOM native. Je pense qu'il est juste de dire que Node.JS et HTML5 Web Workers partagent certaines restrictions.

Il existe des moyens de simuler une implémentation DOM dans le but d'utiliser jQuery dans Node.JS. Si vous voulez toujours utiliser jQuery dans les Web Workers, je pense que vous devriez rechercher les solutions Node.JS et voir si elles s'appliquent.

2voto

Fred Points 378

JQuery sert principalement à travailler avec le DOM et à travailler avec les pages web. Il ne convient donc pas vraiment aux travailleurs Web qui n'ont pas accès au DOM.

Vous pourriez vouloir utiliser une bibliothèque utilitaire au lieu d'une bibliothèque DOM, telle que underscore.js ou peut-être que quelqu'un devrait créer une bibliothèque jQuery Worker, une version allégée de jQuery sans toutes les fonctionnalités de manipulation du DOM, mais en conservant les fonctions utilitaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X