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:
// A list of arguments for separate sequential AJAX calls.
// First argument for first call, second for second call, etc.
var callsArguments = new Array();
// Ein Objekt als Argument des ersten Calls hinzufügen:
callArguments.push({i: 'am', an: 'object'}, ... further argument calls));
// Now the magical pipe in 5 calls:
callsArguments.reduce(function(l, r) {
return l.pipe(function() {
return $.ajax(function(){...});
});
}, $.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 :)