我有一個產品列表頁面,並希望通過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){//完成時調用的代碼}); – 2012-03-30 03:15:44