У меня есть страница с описанием продукта и вы хотите загрузить подробный вид для каждого продукта через AJAX и отобразить его на странице. У меня есть более сложный набор условий, в которых я хочу настроить анимацию, но я буду держать это здесь просто.jQuery: цепочка анимаций и запросы AJAX
В принципе, после щелчка, я хочу запустить запрос AJAX и одновременно анимировать (в некоторых случаях, серию анимаций ...) оболочку содержимого открыть и показать состояние загрузки. Как только ОБА из них будут сделаны, я тогда хочу заглянуть и оживить контент. Я думал, что jQuery Deferred Objects станет для вас способом, но я не очень хорошо понимаю их, и мои попытки не доставили меня туда, где я хочу быть.
Я пытался что-то вроде этого:
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();
... но он сработал, как только запрос AJAX выполняется, даже если анимация еще работает.
Я также попытался это:
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();
... но это просто выполняет все then
/done
вызовов одновременно. Я также попытался переключиться на pipe
вместо звонков then
, но безрезультатно.
Мне бы хотелось понять Отложенные объекты (это даже подходящее/предназначенное для них использование ...?) И, конечно же, как я могу достичь своих целей для этой страницы. Любая помощь или советы очень ценятся ....
+1, я никогда не использовал функциональность Отложенные, но это выглядит очень интересно. Посмотрите http://stackoverflow.com/questions/4869609/how-can-jquery-deferred-be-used Похоже, что второй пример принятого решения - это, вероятно, то, что вам нужно. Что-то вроде: $ .when ($ .getJSON ('/ some/data /'), $ .get ('template.tpl')). Then (function (data, tmpl) {// код для вызова по завершении обоих }); –