从Ajax回调中返回值?

时间:2011-08-18 15:05:11

标签: javascript callback enyo

我有一个JavaScript类来处理对本地数据库(在WebOs设备上)的查询。现在我想做的是,创建一个包含所有基本查询的模型,以简化我的代码。

首先我创建一个函数:

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();

问题是,这不是从我的回调函数(getData)返回数据。我的问题是如何让“getLists”从回调中返回数据?

谢谢

2 个答案:

答案 0 :(得分: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.

最终,数据将在那里,a将以data作为参数进行调用。

请参阅?与传统编程一样,您不会将呼叫链接到a()b()。相反,您可以创建执行所需功能的函数并传递这些函数。

答案 1 :(得分: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();