Trabajador HTML Web y llamada Jquery Ajax

Me pregunto si puedo usar jQuery dentro del archivo de trabajo web. Google Chrome me da este error: “Unbeught ReferenceError: $ no está definido”.

Aquí está el código: El archivo principal:

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

El archivo de trabajador:

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

Por favor ayuda, gracias 🙂

No, no puedes . No hay acceso a componentes que no sean seguros para subprocesos o al DOM y debe pasar datos específicos dentro y fuera de un subproceso a través de objetos serializados. Entonces debes trabajar muy duro para causar problemas en tu código. jQuery es una biblioteca DOM de JavaScript .

Pero puedes usar un XMLHttpRequest nativo en tu trabajador sin embargo.

Y, la importación de scripts externos no pasa por la página con una etiqueta de script : use importScripts () para eso en su archivo de trabajador.

Esto es lo que encontré:

Puede cargar archivos de script o bibliotecas externas en un trabajador con la función importScripts() .

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

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

o

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

Aunque no se puede cargar jQuery, porque jQuery requiere acceso DOM, que los trabajadores de la web no tienen.

Como los trabajadores web están en archivos externos, no tienen acceso a los siguientes objetos de JavaScript:

  • El objeto ventana
  • El objeto del documento
  • El objeto principal

Entonces no puede usar $ dentro del archivo de trabajador. Mejor puedes usar AJAX tradicional algo como esto

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

Referencia en http://www.w3schools.com/html/html5_webworkers.asp

El entorno de ejecución en Node.JS también carece de una implementación DOM nativa. Creo que es justo decir que Node.JS y HTML5 Web Workers comparten ciertas restricciones.

Hay formas de simular una implementación DOM con el propósito de usar jQuery en Node.JS. Si aún desea usar jQuery en Web Workers, creo que debería buscar las soluciones Node.JS y ver si se aplican.

jQuery es principalmente para trabajar con DOM y trabajar con páginas web. Por lo tanto, no es tan adecuado para Web Workers que no tienen acceso al DOM.

Es posible que desee utilizar una biblioteca de utilidad en lugar de una biblioteca DOM, como underscore.js , o quizás alguien debería crear una biblioteca jQuery Worker, una versión simplificada de jQuery sin toda la funcionalidad de manipulación DOM, simplemente manteniendo las funciones de utilidad. .

eche un vistazo a este complemento https://github.com/rwldrn/jquery-hive