2014-04-15 66 views
1

我正在學習執行一個回調後成功的結果來自兩個函數,其中之一是ajax和一個是非ajax(都是異步)。在我的腳本中,有一個非ajax調用來在程序開始時加載多個圖像,以及一個ajax(JQuery)調用來向腳本中的變量請求帶有數據的JSON。我發現JQuery的when()函數用於進行多個ajax調用,並且我發現this answer用於在回調之前發出多個請求,這可能是hackable。我正在追蹤我的尾巴,尋找一些關於是否或如何使函數在多個混合函數之後執行回調的建議。預先感謝您的想法!多個ajax和非ajax函數後回調

回答

2

$.when實際上將採取多種延期對象,所以你可以做這樣的事情:

var xhr = ajax(); 
var images_promise = loadImages(); 

$.when.apply($, [xhr, images_promise]).done(function() { 
    // something to do when both are complete 
}); 

前提是ajaxloadImages函數返回承諾對象:

function ajax() { 
    return $.ajax({ 
     // ajax configuration 
    }); 
} 

function loadImages() { 
    // create the deferred promise object 
    var dfd = new jQuery.Deferred(); 
    $("img").on('load', function() { 
     // on the load event resolve the promise 
     dfd.resolve(); 
    }); 
    return dfd; 
} 

瞭解更多關於延期承諾here

+0

好吧,我想我需要做一些關於承諾對象的閱讀 - 我還沒有想到我寫的loadImages函數中有一個promise對象。 – gromiczek

+0

@gromiczek聽起來不錯。我已經添加了一個非常簡單的使用延遲承諾以供參考的示例。祝你好運! –

+0

哇 - 謝謝!我要給這個旋轉。 – gromiczek