2011-08-18 132 views
1

我有一個JavaScript類處理對本地數據庫的查詢(在WebOs設備上)。現在我想要做的就是用我所有的基本查詢創建一個模型來簡化我的代碼。Ajax回調的返回值?

所以首先我創建了一個功能:

getLists: function(){ 
      this.query('SELECT * FROM lists ORDER BY rowID DESC', { 
       onSuccess: enyo.bind(this,function(data) { this.getData(data); }), 
       onError: function() { return false; } }); 
    } 

而且比我有接收數據我的回調函數:

getData: function(data){ 
     return data; 
    } 

現在我想要做什麼,是這樣稱呼它從我的應用程序:

var data = getLists(); 

問題是,這是不是從我的回調函數(getDat一個)。我的問題是如何讓「getLists」從回調中返回數據?

謝謝

回答

1

你不明白。 AJAX中的第一個A是異步的。這些請求會在其他處理中「過期」發生。您在撥打getLists後會調用AJAX請求,並在遠程服務器響應AJAX請求時調用回調函數。

- 編輯意見 -

如果你想「看」一個變量,你可以使用這樣的事情:

// Set up a container for the data to return to. 
var retData; 

// Modify the getData function to assign to the global variable 
getData: function (data) { 
    retData = data; 
} 

// Start the "wait" process. 
var myInterval = setInterval(function() { 
    if (retData == undefined) { 
    return; 
    } 

    // when the return data shows up stop waiting. 
    clearInterval(myInterval); 

    // some other data processing here in this function 
    // or trigger the actual processing function. 
    // don't have to pass retData to it, it's global, the 
    // data handler function can retrieve it itself. 
    myDataHandler(); 
}, 1000); 

// make the ajax call here. 
getLists(); 
+0

我知道,這就是爲什麼我創建了一個回調函數。我的問題是,如何使用最小代碼從回調函數中獲取數據? – levi

+0

@levi - 在回調函數中處理返回的數據,或將其分配給全局變量/調用另一個全局函數並將數據傳遞給它。 –

+0

我明白你在說什麼。但是我怎麼能知道什麼時候該全局變量被設置?我希望能夠調用/獲取數據,例如:data = myCall()。這可能嗎? – levi

2

你以爲帝國:C如下強度B按照A.把它給忘了。

AJAX和現代JavaScript的工作方式不同。你從不說「現在得到數據」,你說「數據可用時調用X」。

因此,解決方案是編寫一些代碼,對數據做一些有用的工作。我們稱之爲a。相反的:

var data = conn.getData(); 
a(data); 
b(data); 
c(data); 

你做

conn.getData(a); // a has to call b which calls c. 

最終,該數據將在那裏和adata作爲參數來調用。

請參閱?與傳統編程一樣,您不會將呼叫鏈接到a()b()。相反,你可以創建你想要的功能並傳遞這些功能。