2013-03-01 48 views
1

我想抓住jQuery中的延期對象,但仍然遇到麻煩。基本上,我有一系列我想運行的函數,其中函數1的結果表示第二個函數中的邏輯。我不確定是否必須在某處調用管道方法,或者只是使用then(),但是不管怎樣,我都會失敗。如果你看第一個函數,有一個名爲data的對象,我想傳遞給第二個函數。在jQuery的延期對象之間發送數據

function run() { 
    var data1 = {}; 
    var data2 = {}; 

    var body = $('body'); 

    $.when(first()).then(second()).done(constructData); 

    function first() { 
     var d = new $.Deferred(); 



     var data = {} //arbitrary data set that i want to send to second 

     data.message = 'first message'; 
     data.id = 1234; 

     body.append('First done'); 

     //return data object? add it to the resolve method? 
     d.resolve(); 
    } 

    function second(data) { //how do I get this data object? 

     var d = new $.Deferred(); 


     body.append('Data from first:'); 

     body.append('Second done'); 

     d.resolve(); 
    } 
    function constructData() { 

    } 

} 

回答

6

這裏就是你們的榜樣的簡化,現場演示:http://jsfiddle.net/L96cD/

缺什麼在你的代碼:

1 /你需要通過在解決第二個函數的參數:

d.resolve(data); 

2 /你需要返回延期:

return d; 

注意:實際上,您將在解析之前返回延遲(因此名稱)。此外,延遲是建立在一些方法,如ajax調用。

+0

完美謝謝你 – Brian 2013-03-01 06:44:25