2011-11-10 113 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