2015-09-07 78 views
0

我試圖在一個promise方法中設置一個variable並在另一個方法中訪問它,但沒有多少運氣。在jQuery中傳遞承諾方法之間的變量AJAX

我有這樣的代碼:

$.getJSON('some/file/') 
.done(function(response) { 
    var foo = response; 
}) 
.always(function() { 
    // How can I access 'foo' here? 
}); 

所以我怎麼能訪問其他承諾方法foo變量?

+1

您需要在'done()'之外聲明'foo' – Tushar

+0

這看起來非常糟糕。如果promise失敗,'foo'不會被設置,所以你的'always'回調會拋出嘗試使用它。你究竟想要做什麼,你需要解決什麼是真正的問題? – Bergi

回答

2

這是所有範圍,如果你聲明外done()函數的變量,那麼你可以訪問它在always()

var foo; 
$.getJSON('some/file/') 
.done(function(response) { 
    foo = response; 
}) 
.always(function() { 
    // How can I access 'foo' here? 
    console.log(foo); 
}); 

您可能會發現有趣的this也。還要記住,當ajax失敗時總會執行。

+0

有道理,非常感謝。是的,知道「永遠」的事情,那就是我想要的行爲。 :) – Brett

+0

也許完成/失敗的方法是更好的方法 – Robert

+0

不,對於我使用代碼的情況,我不希望「always」塊內的代碼依賴於JSON文件檢索的結果 - 它*總是*必須執行。 – Brett