2011-11-10 126 views
0

嘿,我只是一直在與HTML5數據庫API鬼混,我無法返回函數的結果。這是我的。Javascript數據庫API返回結果

var list = GetScenarios(); 

GetScenarios: function() 
{ 

var scenarios; 

// get all the scenarios 
conn.transaction(function(_t) { 

_t.executeSql('SELECT * FROM scenarios', [], function(_tr, _result) { 

     scenarios = _result.rows; 

    }); 
}); 

return scenarios; 

} 

我設法從數據庫獲取行,但行不會分配給變量場景。我知道它的範圍,但我不知道如何從GetScenatios函數返回結果。

當我記錄_result.rows我有那裏的數據,但情況始終未定義;

有什麼想法?

這是我的js文件是如何設置的。

window.MyExtension = (function() 
{ 

    return ({ 

    OtherMethod: function() { 


     var list = window.MyExtension.GetScenarios(); 

    }, 

    GetScenarios: function() { 

     ...see above 

    } 

}()); 
+0

你的代碼是無效的JavaScript。 'GetScenarios:function()'應該是'GetScenarios()'函數。它可以是'GetScenarios = function()',但它必須出現在'var list = GetScenarios();'之前。 – gilly3

+0

@ gilly3,正確,除了最後一句:http://jsfiddle.net/FvdbT/ – stivlo

+0

@stivlo - 也許你誤解了我的評論。 '函數GetScenarios()'的作品,由你的jsFiddle證明。但是,'GetScenarios = function()'沒有,如下所示:http://jsfiddle.net/FvdbT/1/ – gilly3

回答

1

它看起來像你試圖從一個異步請求返回代碼,就好像它是同步的。你需要一個回調參數添加到GetScenarios()

function GetScenarios(callback) { 
    conn.transaction(function(_t) { 
     _t.executeSql('...', [], function(_tr, _result) { 
      callback(_result.rows); 
     }); 
    }); 
} 

而且從改變你的調用代碼:

var list = GetScenarios(); 
// do something with list 

要,這樣的:

GetScenarios(function (list) { 
    // do something with list 
}); 
+0

Perfecto!非常感謝。另外事實證明,我必須在對象內使用window.MyExtension.GetScenario()。謝謝堆 – hooligan