商品リストページがあり、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
呼び出しのすべてを実行します。
then
コールの代わりに
pipe
に切り替えようとしましたが、無駄です。
私はDeferred Objectsを理解するのが大好きです(これは適切な/意図された用途でもありますか?)、もちろん、このページの目標をどのように達成できるのでしょうか。
$('.content').ajaxStop(function() {
animateContent();
});
.ajaxStop()here
+1私はDeferred機能を使用したことはありませんが、非常に興味深いようです。 http://stackoverflow.com/questions/4869609/how-can-jquery-deferred-be-usedを見てください。受け入れられたソリューションの2番目の例がおそらく必要なものであるようです。 .then(function(data、tmpl){//両方の完了時に呼び出すコード)$ .get( '/ some/data /'、$ .get( 'template.tpl')) }); –