我正在使用以下代码
var Year12=new Array();
GetYear(function(Year12)
{
alert(Year12);
});
function GetYear(callback)
{
var selectAllStatement = "SELECT DISTINCT year FROM mytable";
var db = openDatabase("Postit", "1.0", "Notebook", 200000);
var dataset;
alert("1");
db.transaction(function(tx) {
alert("2");
tx.executeSql(selectAllStatement, [], function(tx, result)
{
alert("3");
dataset = result.rows;
for (var i = 0, item = null; i < dataset.length; i++)
{
item = dataset.item(i);
Year12[i]=item['year'];
}
callback(Year12);
});
});
}
这里 tx.executeSql 语句没有被执行意味着警报 3 没有显示。有什么办法可以做到这一点
最佳答案
db.transaction 和 tx.executeSql 调用是异步的,因此回调函数也是异步的。这意味着 GetYear
将在 tx.executeSql
回调填充您的 Year12
数组之前完成执行并返回。/p>
一旦有了异步行为和回调,唯一明智的解决方案当然是更多的回调。您需要一个更像这样的结构:
function GetYear(callback) {
//...
db.transaction(function(tx) {
//...
tx.executeSql(selectuniqueyearStatement, [], function(tx, result) {
var Year12 = [ ];
//... populate the locale Year12 using result.rows
callback(Year12);
});
});
}
然后像这样使用它:
GetYear(function(year12) {
// Do whatever you need to do with the year12 array...
});
与 AJAX 调用使用的代码结构和策略基本相同。
关于javascript - 访问 WebSQL 函数内的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11877520/