No me parece para ser capaz de utilizar jQuery en mi webworker, sé que debe haber una manera de hacerlo con XMLHttpRequest, pero parece que eso podría no ser una buena opción cuando leí esta respuesta.

creo que ajax es ahora en todos los webworker implimentations. me tomó un tiempo para agregar, totalmente con ajax2, pero es bastante sólido.
ajax2? Cuidado de explicar?
XMLHttpRequest level 2: caniuse.com/xhr2
Puedes mostrar un ejemplo?
no, jQuery no funciona dentro de la web de los trabajadores. puede utilizar texto JS. usted puede ser capaz de obtener Zepto o algunos de los node.js DOMs a trabajar, pero sería mucho más trabajo que simplemente con un iframe, que se puede ejecutar jQuery, jsonp llamadas, etc…

OriginalEl autor qwertynl | 2013-12-18

3 Comentarios

  1. 27

    De curso puede utilizar AJAX en el interior de su webworker, usted sólo tiene que recordar que una llamada AJAX es asincrónico y usted tendrá que usar las devoluciones de llamada.

    Este es el ajax función que uso en el interior de mi webworker para golpear el servidor y hacer peticiones 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;
    };

    A continuación, en el interior de su trabajador puede hacer:

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

    Que podría quieren leer esta respuesta acerca de algunos de los escollos que podría suceder si usted tiene demasiados peticiones AJAX va a través de webworkers.

    Para enviar objetos JSON que usted necesitará hacer algo a lo largo de las líneas de req.setRequestHeader(«Content-Type», «application/json;charset=UTF-8»); data_string = JSON.stringify(datos);

    OriginalEl autor qwertynl

  2. 2

    Si intenta llamar a un servicio en otro dominio que utiliza JSONP, puede utilizar el importScripts función. 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();

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

    OriginalEl autor rbrundritt

  3. 2

    Sólo uso de la función JS fetch() de Fetch API. También puede configurar un montón de opciones como CORS omitir y así sucesivamente, de manera que puede lograr el mismo comportamiento como con importScripts pero en mucho más limpia utilizando Promesas).

    OriginalEl autor lukyer

Dejar respuesta

Please enter your comment!
Please enter your name here