javascript - 访问 WebSQL 函数内的变量

标签 javascript web-sql

我正在使用以下代码

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/

相关文章:

javascript - 在 Javascript 中调用函数

javascript - 如何访问构造函数内的状态

javascript - 其功能的正确语法形式是什么——Javascript

html - HTML5 中的本地存储、 session 存储、网络存储、网络数据库和 cookie

android - Chrome 和 Android 中的 Web SQL 存储限制?

javascript - jQuery 获取许多具有相同类的对象并在它们之间切换

javascript - 根据函数结果更改数据百分比属性?

jquery - 跨浏览器 HTML5 存储库

javascript - 将额外参数传递给 WebSQL 回调函数?

javascript - 表单字段中的 html 标记不起作用