2010-01-17 172 views
6

我有一個javascript函數,它會詢問一些ajax數據並獲取一個JSON對象。然後它應該返回對象。Jquery:在返回之前等待回調

的問題是,我不知道如何從Ajax回調函數返回。當然

myFunction: function() { 
    $.get(myUrl, function(data) { 
     return data; 
    }); 
} 

不起作用,因爲內部函數返回而不是外部。

在另一方面執行我所需要的只是裏面的回調會打破我的MVC分區:該代碼是一個模型,我D'喜歡使用結果對象在控制器中。

暫時的解決辦法是

myFunction: function() { 
    var result = $.ajax({ 
     url: myUrl, 
     async: true, 
     dataType: 'text' 
    }).responseText; 
    return eval(result); 
} 

具有同時(使用和eval,我寧願避免)等待答覆阻擋瀏覽器的缺點。

是否有任何其他解決辦法?

+0

這已被問了很多很多次......參見舉例:http://stackoverflow.com/questions/31129/how-can-i-return-a-variable-from-a-getjson-function – Shog9 2010-01-17 17:15:50

回答

9

你可以只通過一個回調到你的函數,處理數據時,它已準備就緒:

myFunction: function(callback) { 
    $.get(myUrl, function(data) { 
     callback(data); 
    }); 
} 
+0

這是迄今爲止最乾淨的解決方案。我將用作回調控制器方法。缺點是需要將一個控制器方法分解爲兩個,但我想我會使用這個解決方案。 – Andrea 2010-01-17 17:26:34

1

爲什麼你希望它返回的對象?如果您打算在使用此對象之後,更好的方法是將該函數使用數據調入的回調。

+0

我在問題中說過。該函數本身在模型中,我想在控制器中使用該對象。在回調中使用對象是可行的,但打破了MVC模式。也許我會這樣做,如果我找不到更好的選擇。 – Andrea 2010-01-17 17:22:40

相關問題