2009-11-03 55 views
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){ 
      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); 

回答

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); 
    } 
); 
+0

謝謝,這個作品完美。 – Sveisvei 2009-11-03 14:00:00

2

應該只是:

return callback; 

否則返回回調()執行回調函數,並返回其返回值。

+0

假設這就是你想要做的,我對此並不十分清楚。 – 2009-11-03 10:40:24

+0

這對我來說沒有任何意義。 'function a(callback){return callback''返回你傳遞給它的值.. – jantimon 2009-11-03 10:42:56

+0

是的,這是真的,我甚至沒有注意到他將它作爲參數傳遞給外部函數。 – 2009-11-03 10:49:44

0

的問題是Ajax回調異步調用。這意味着loadFromDatabase函數首先返回,然後調用回調函數。因此從回調中返回的東西是不可能的。

您可以使用異步Ajax選項使調用異步,但我不建議這樣做。您需要考慮Ajax的異步特性來重新審視您的架構。

2

阿賈克斯是異步(因此名稱)。你不能從中返回任何東西。

getJSON方法會導致發送HTTP請求。您傳遞的函數在該請求被回答時在事件上調用。它沒有鏈接到調用函數。

您必須編寫該函數才能執行您想要對數據本身執行的操作。您無法將數據傳回並在調用函數中處理它。