2011-08-18 133 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()。相反,你可以创建你想要的功能并传递这些功能。