2010-05-31 34 views

Respuesta

14

Como Obama diría: ¡SI PUEDES!

jQuery .ajax()

Configuración

async = false 

dentro del manejador .ajax() hará el truco.

+0

gracias por su respuesta súper rápida :) – keshav84

+2

Esta funcionalidad está en desuso a partir de jQuery 1.8 http://api.jquery.com/jQuery.ajax/ – Doug

+1

¿Cuál es la alternativa recomendada? –

3

Mientras que jQuery puede sincronizar llamadas AJAX estableciendo la propiedad synch: false, esto hace que el navegador se cuelgue hasta que el AJAX finalice. El uso de una biblioteca de control de flujo como Frame.js le permite hacer llamadas síncronas sin bloquear el navegador:

$.each(ajaxObjects, function(i, ajaxCall){ 
    Frame(function(next)){ // declare the callback next here 

     ajaxCall.complete = function(data){ 
      // do something with the data 
      next(); // go to the next ajax call 
     } 
     $.ajax(ajaxCall); 

    }); 
} 
Frame.init(); 

Esta serie de llamadas AJAX se hará en orden, cada uno esperando que el anterior para completar, sin hacer que el navegador se bloquea . También tiene el beneficio adicional de que los datos vuelven de las llamadas ajax en un orden predecible, a diferencia de las llamadas asincrónicas que vuelven en orden aleatorio.

+0

Algo que no tengo claro sobre eso es algo importante para mí: ¿cuándo regresa Frame.init() en tu respuesta? ¿Antes o después de que todas esas llamadas estén completas? –

+0

Frame.init simplemente le dice a Frame que cuando recibe un trabajo, debe ejecutar el trabajo. En Frame v2, se renombró a Frame.start. El uso alternativo sería si quisiera agregar un montón de cosas a Frame que, pero no quería que Frame comenzara a ejecutar los trabajos todavía. Frame simplemente mantendrá todos los trabajos hasta que se llame a .start(). – BishopZ

Cuestiones relacionadas