Javascript 访问WebSQL函数中的变量

Javascript 访问WebSQL函数中的变量,javascript,web-sql,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", 2

我正在使用以下代码

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);
       });
     });
    }
var Year12=新数组();
GetYear(函数(第12年)
{
警报(第12年);
});
函数GetYear(回调)
{
var selectAllStatement=“从mytable中选择不同的年份”;
var db=openDatabase(“Postit”、“1.0”、“笔记本”,200000);
var数据集;
警报(“1”);
数据库事务(功能(tx){
警报(“2”);
tx.executeSql(selectAllStatement,[],函数(tx,result)
{
警报(“3”);
数据集=result.rows;
对于(var i=0,item=null;i

此处未执行tx.executeSql语句意味着未显示警报3。是否有方法执行此操作数据库事务
tx.executeSql
调用是异步的,因此回调函数。这意味着
GetYear
将在
tx.executeSql
回调填充
Year12
数组之前完成执行并返回

一旦有了异步行为和回调,唯一明智的解决方案当然是更多的回调。您需要一个更像这样的结构:

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...
});
然后像这样使用它:

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调用使用的代码结构和策略相同。

hi。。它不起作用。当iam调用GetYear(函数(year12){})时;,未执行db.transaction在db.transaction外部写入的代码executed@VijeshP:新版本看起来像什么?您可以编辑问题以添加新版本。