Domanda

Ho testato le nuove funzioni AJAX anticipate in jQuery 1.5 e sono impressionato con la loro semplicità e potenza. C'è una domanda più grande che ho legato alla miglior modo di coda queste richieste.

Ho due scenari: seriali e parallele, se si vuole. Voglio evitare i termini di sincronizzazione / asincrone perché io voglio tutti questi ad essere richieste asincrone così l'utente può eseguire altre azioni durante l'attesa per la coda da elaborare. Io poi voglio chiamare una sola funzione quando la coda ha completato l'elaborazione.

In "modalità seriale" avere due richieste vorrei li trattati come segue:

RequestA -> ResponseA -> RequestB -> ResponseB -> EndOfQueue

In "parallelo" con due richieste voglio questo risultato:

RequestA -> RequestB (ResponseA, ResponseB trattati ogniqualvolta pronto) -> EndOfQueue

In entrambi i casi, se qualsiasi Richiesta non vorrei la coda di fermarsi e passare il controllo a una funzione fallimento.

Ho requisiti che specificano una lunghezza della coda dinamica quindi non credo che sarò in grado di appena stringa di un mucchio di .then () o .quando () deferreds insieme come io non so se si tratta di uno o un centinaio di articoli. Sto eseguendo la logica di business sul server tramite API di un fornitore in modo dosaggio lato server sarà difficile in quanto non ho il controllo su quel codice.

Ho costruito casi di test che eseguono il caso "parallelo" e chiamare la funzione quando () dopo che tutti hanno completato con successo, ma questi test non sono dinamici nella lunghezza della coda e non sono portatili al modello di serie.

posso vedere come ho potuto creare un oggetto di coda personalizzato per gestire questo, ma sembra che tutte le parti sono già scritti per me in jQuery (?). Ho guardato, ma non ho trovato un esempio che copre le richieste sequenziali in questo modo.

Qualche idea su come gestire questa situazione con la coda jquery / funzionalità differito?

È stato utile?

Soluzione

Il modo più semplice per raggiungere il tuo RequestA -> ResponseA -> RequestB -> ordine ResponseB sarebbe utilizzando qualcosa di simile a questo:

var queue = [];

function qNext() {
    $.ajax(queue.shift()).success(qNext);
}

function qAjax(options) {
    queue.push(options);
}

qAjax({
    // $.ajax options
});

qAjax({
    // $.ajax options
});

qNext();

DEMO .

Questa è una versione un po 'semplificata delle vostre esigenze, ma sarebbe facile aggiungere un callback da eseguire dopo la coda è vuota.

Sei sicuro di non si vuole l'ordine di RequestA -> RequestB -> ResponseA -?> ResponseB

Altri suggerimenti

Si prega di fare riferimento ai due domande ho chiesto

  1. jQuery differite
  2. non funziona
  3. jQuery.when comprensione

Speriamo che si dovrebbe essere in grado di capire il concetto.

commento su .quando ( metodo) dalle funzioni AJAX differita

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top