Ich habe eine Produktlistenseite und möchte für jedes Produkt eine Detailansicht über AJAX laden und auf der Seite anzeigen. Ich habe einen komplexeren Satz von Bedingungen, mit denen ich Animationen erstellen möchte, aber ich werde es hier einfach halten.jQuery: Verketten von Animationen und AJAX-Anfragen
Grundsätzlich, nach dem Klicken, möchte ich die AJAX-Anfrage ausführen und simultan animieren (in einigen Fällen eine Reihe von Animationen ...), die den Inhalts-Wrapper öffnen und einen "Lade" -Zustand zeigen. Sobald BEIDE von denen fertig sind, möchte ich dann reinschauen und den Inhalt animieren. Ich dachte jQuery Deferred Objects wäre der Weg zu gehen, aber ich habe kein gutes Verständnis für sie und meine Versuche haben mich nicht dahin gebracht, wo ich sein möchte.
Ich habe versucht, so etwas wie diese:
var dfr = $.Deferred();
dfr.then(function() { return wrapper.fadeIn(5000); });
$.when(dfr, $.get('/detail.html'))
.then(function() {
console.log('All done, run additional animations...');
});
dfr.resolve();
... aber es wird, sobald die AJAX-Anforderung erfolgt, selbst wenn die Animation läuft noch ausgelöst.
Ich habe auch versucht diese:
var dfr = $.Deferred();
dfr.then(function() { return wrapper.fadeIn(5000); });
dfr.then(function() { return $.get('/detail.html'}) });
dfr.done(function() { console.log('All done, run additional animations...'); });
dfr.resolve();
... aber das führt nur alle der then
/done
Gespräche gleichzeitig. Ich habe auch versucht, in pipe
anstelle der then
Anrufe, vergeblich zu wechseln.
Ich würde gerne Deferred Objects verstehen (ist das überhaupt eine angemessene/beabsichtigte Verwendung für sie?) Und natürlich, wie ich meine Ziele für diese Seite erreichen kann. Jede Hilfe oder Tipps sind sehr geschätzt ....
+1, ich habe nie die Deferred-Funktionalität verwendet, aber es sieht sehr interessant aus. Schauen Sie sich http://stackoverflow.com/questions/4869609/how-can-jquery-deferred-be-used an Es sieht so aus, als ob das zweite Beispiel der akzeptierten Lösung wahrscheinlich das ist, was Sie brauchen. Etwas wie: $ .when ($ .getJSON ('/ einige/data /'), $ .get ('template.tpl')) .then (function (data, tmpl) {// Code, der nach Beendigung beider aufgerufen wird }); –