2015-10-02 32 views
2

當在jQuery的延遲對象中使用回調函數時,特別是使用ajax調用時,該函數有三個參數,dataresponseTextjqXHR對象。按照提供這些參數的特定邏輯,我遇到了麻煩。它們如何饋送到方法內部的匿名函數? data在哪裏定義?「數據」如何提供給jQuery延遲對象的完成方法?

實施例:

這工作並記錄數據:

deferredObj 
    .done(function(data){ 
     console.log(data) 
    }); 

這不起作用,數據是一個未知的變量:

defferedObj 
    .done(console.log(data)); 

回答

1

這不起作用,數據是一個未知的變量

defferedObj.done(console.log(data));

當您使用console.log(data)作爲回調函數時,函數會在遇到時立即調用。

因此,在調用log時,data變量是undefined

這就像是調用函數.done(myFun())

如果你想調用函數console.log回調函數的參數自動傳遞,你可以把它作爲

defferedObj 
    .done(console.log.bind(console)); 

他們如何輸送到匿名函數的方法裏?數據在哪裏定義?

你能想到的定義如下異步功能:

function asyncDoSomething(param, callback) { 
    // Do something asynchronously here to get the data from somewhere 
    // Maybe DB/Network, etc. 

    // When processing is completed and data is retrieved 
    callback && callback(data); 
} 
+0

你的意思是,即使是在'.done()'事件被觸發之前叫什麼名字?數據變量在哪裏被定義? – Preston

+1

@Preston是的,因爲你正在調用它直接調用的函數。您沒有傳遞函數,而是從調用該函數的結果傳遞返回的值 – Tushar

相關問題