无法弄清楚如何返回回调函数 - 需要替代解决方案

时间:2009-11-03 10:31:48

标签: javascript jquery function

我试图在加载数据后返回一个回调值,我可能会看到这一切都错了。

    var loadFromDatabase = function(callback){
  if (!obj.data.myarray) {
      // the problem is here, the jquery obj returns the ajax request obj
    return $.getJSON('http://validjson',function(data){
          obj.data.myarray = data.myarray;
          return callback();
        }); 
      } else {
    return callback();
  }
};
var findObjInArray = function(){
      // need i to be returned, but isnt working in the if statement, but works in the else statement
  return loadFromDatabase(function(){
    var l = obj.data.myarray.length;
    for (var i = 0; i < 50;i++) {
      if (i === 30) {
      return i;
        }
  }
    });
  };
  var myval = findObjInArray();
  console.log(myval);

4 个答案:

答案 0 :(得分:2)

应该只是:

return callback;

执行return callback()执行回调函数并返回其返回值。

答案 1 :(得分:2)

Ajax是异步(因此名称)。你不能从中归还任何东西。

getJSON方法导致发送HTTP请求。当请求得到应答时,将在事件上调用您传递的函数。它没有与调用函数的链接。

您必须编写该功能以执行您想要对数据本身执行的操作。您无法传回数据并在调用函数中处理它。

答案 2 :(得分:0)

你必须再使用一个回调函数:

var loadFromDatabase = function(callback){
        if (!obj.data.myarray) {
                    // the problem is here, the jquery obj returns the ajax request obj
                return $.getJSON('http://validjson',function(data){
                  return callback(data.myarray);
                    });

        } else {
                return callback();
        }

};


var findObjInArray = function( callback ){
      // need i to be returned, but isnt working in the if statement, but works in the else statement
  return loadFromDatabase(function( myarray ){


        var l = myarray.length;
        for (var i = 0; i < 50;i++) {
          if (i === 30) {
                 return callback ( i );
          }
        }
  });
};


findObjInArray(
   function ( myval )
   {
      console.log(myval);
   }
);

答案 3 :(得分:0)

问题是Ajax回调是异步调用的。这意味着loadFromDatabase函数首先返回,然后调用回调。因此,不可能从回调中返回某些东西。

您可以使用异步Ajax选项使调用异步,但我不建议这样做。您需要考虑Ajax的异步特性来重新审视您的体系结构。