javascript jquery ajax web-worker

javascript - ¿Es factible hacer una solicitud AJAX de un Trabajador Web?



jquery web-worker (3)

Parece que no puedo usar jQuery en mi trabajador web, sé que debe haber una manera de hacerlo con XMLHttpRequest , pero parece que esa podría no ser una buena opción cuando leo esta respuesta .


Si intenta llamar a un servicio en otro dominio que usa JSONP, puede usar la función importScripts. Por ejemplo:

// Helper function to make the server requests function MakeServerRequest() { importScripts("http://SomeServer.com?jsonp=HandleRequest"); } // Callback function for the JSONP result function HandleRequest(objJSON) { // Up to you what you do with the data received. In this case I pass // it back to the UI layer so that an alert can be displayed to prove // to me that the JSONP request worked. postMessage("Data returned from the server...FirstName: " + objJSON.FirstName + " LastName: " + objJSON.LastName); } // Trigger the server request for the JSONP data MakeServerRequest();

Encontré este gran consejo aquí: http://cggallant.blogspot.com/2010/10/jsonp-overview-and-jsonp-in-html-5-web.html


Solo usa la función JS fetch () de Fetch API . También puede configurar muchas opciones como desvío de CORS y así sucesivamente (para que pueda lograr el mismo comportamiento como con importScripts pero de una manera mucho más limpia utilizando Promesas ).


Por supuesto , puede usar AJAX dentro de su trabajador web, solo debe recordar que una llamada AJAX es asíncrona y tendrá que usar devoluciones de llamada.

Esta es la función ajax que uso dentro de mi trabajador web para golpear el servidor y hacer solicitudes AJAX:

var ajax = function(url, data, callback, type) { var data_array, data_string, idx, req, value; if (data == null) { data = {}; } if (callback == null) { callback = function() {}; } if (type == null) { //default to a GET request type = ''GET''; } data_array = []; for (idx in data) { value = data[idx]; data_array.push("" + idx + "=" + value); } data_string = data_array.join("&"); req = new XMLHttpRequest(); req.open(type, url, false); req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); req.onreadystatechange = function() { if (req.readyState === 4 && req.status === 200) { return callback(req.responseText); } }; req.send(data_string); return req; };

Entonces dentro de tu trabajador puedes hacer:

ajax(url, {''send'': true, ''lemons'': ''sour''}, function(data) { //do something with the data like: self.postMessage(data); }, ''POST'');

Es posible que desee leer esta respuesta acerca de algunos de los escollos que pueden suceder si tiene demasiadas solicitudes de AJAX en los trabajadores web.