jQuery AJAX Race Conditions verhindern und AJAX Aufrufe pipe'n mit jQuery.Deferred() in 5 Zeilen!

Die kleine Denkaufgabe des Tages: Wie schafft man es in möglichst wenig Zeilen eine Reihe von AJAX-Aufrufen, die anhand einer Schleife erzeugt werden, mit einer Pipe sequenziell abzuarbeiten?

Die Lösung:

  1. // A list of arguments for separate sequential AJAX calls.
  2. // First argument for first call, second for second call, etc.
  3. var callsArguments = new Array();
  4.  
  5. // Ein Objekt als Argument des ersten Calls hinzufügen:
  6. callArguments.push({i: 'am', an: 'object'}, ... further argument calls));
  7.  
  8. // Now the magical pipe in 5 calls:
  9. callsArguments.reduce(function(l, r) {
  10.         return l.pipe(function() {
  11.           return $.ajax(function(){...});
  12.         });
  13.       }, $.Deferred().resolve());

Race conditions werden so wirkungsvoll verhindert und die Seite bleibt responsive (im Gegensatz zu einem einfachen "async: false")

Damit ergibt sich allerdings auch die nächste Frage für die Bastler unter Euch: Gibt es noch einen einfacheren Weg mit identischem Ergebnis oder vielleicht ohne den Einsatz des deprecated ".pipe()"?

Fiddle-Beweise sind willkommen :)

Kommentare

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.

Weitere Informationen über Formatierungsoptionen