2010-11-22 84 views
0

我有一個實用的.js文件,通過Ajax獲取一些數據。現在這個實用方法不知道誰會叫它。這個jQuery getJSON AJAX調用的回調方法有問題

因此,當Ajax異步完成時,它需要將對象發回給調用者。我不知道如何做到這一點:(

這是我的代碼...

function someMethod(a, b, c) { 
    // ... stuff ... 

    // Now fire it off, asynchronously! 
    var request = $.getJSON(url, function (jsonResult) { 
     var result = 
     { 
      json: jsonResult, 
      contentLength: request.getResponseHeader("Content-Length") 
     }; 

     // TODO: Now return this result to the caller. 
    }); 
} 
當然

,我不能使用return result;,因爲這是異步。我覺得我需要要傳遞一個參數,這個參數是上面ajax代碼需要調用的函數,當結果已經異步完成的時候。只是不知道如何..因爲記住..這是方法不知道是誰調用它..所以它不知道任何其他方法和東西。

任何想法,請?

回答

3

你說得對。您需要將該函數傳遞給「someMethod」,以便您可以將數據返回給它。根據回調函數的不同,您可能還需要使用call或apply方法來正確設置它的上下文。 「上下文」是在回調函數中將設置「this」關鍵字的內容。

如果你的回調函數不會對關鍵字的任何引用「本」,那麼你可以忽略使用調用()或應用()並調用函數作爲第二個例子。 (例如回叫(結果));

function someMethod(a, b, c, callback, context) { 
    // ... stuff ... 

    // Now fire it off, asynchronously! 
    var request = $.getJSON(url, function (jsonResult) { 
     var result = 
     { 
      json: jsonResult, 
      contentLength: request.getResponseHeader("Content-Length") 
     }; 

     // Now return this result to the caller. With the context set 
     callback.call(context, result); 

     // Example of callback without setting the context 
     //callback(result); 
    }); 
} 
+0

嗨亞歷克斯,我很困惑'上下文'參數。你能否詳細說明一下,或許是一個例子? – 2010-11-22 06:21:07

+0

的背景是非常簡單,只是一個什麼樣的「這個」關鍵詞是指在任何給定函數在執行時的描述。 Javascript有能力通過使用call()或apply()方法來改變「this」引用的內容 – Alex 2010-11-22 06:26:51