2

如何访问结果

tx.executeSql('select query for a table',[],sucessCB);
function sucessCB(tx, results){  //<--- this results param
    console.log(results.row.item(0).name);
}

我尝试了类似的东西

function(){
    var tab = [];
    tx.executeSql('select query for a table',[],sucessCB);

    function sucessCB(tx, results){  //<--- this results param
        console.log(results.row.item(0).name);
        for(i=0;i<results.length;i++){
            tab.push(results.row.item(i))
        }
    }

    console.log(tab);  //<--- this returns always null
}

如何在回调函数之外访问变量,或者有没有办法直接将 sql 结果存储在变量中。有没有办法在

tx.executeSql('another select query',[],function(tx, results, tab ){  // <-- this inside sucessCB
console.log(tab);
});

在所有情况下,变量都是空的。有没有另一种方法可以做到这一点。任何建议都会有所帮助,谢谢。

4

1 回答 1

5

您使用回调如下:

var querySql = function(sql, callback) {

  tx.executeSql(sql,[],sucessCB);

  function sucessCB(tx, results){  //<--- this results param
    var tab = [];
    for(i=0;i<results.length;i++){
        tab.push(results.row.item(i))
    }
    callback(tab);
  }
}

querySql('select query for a table', function(result) {
   console.log(result); 
}

但是这种问题最好通过使用延迟概念来解决。

var querySql = function(sql) {
  var df = $.Deferred();
  tx.executeSql(sql,[],sucessCB, errCB);

  function sucessCB(tx, results){  //<--- this results param
    var tab = [];
    for(i=0;i<results.length;i++){
        tab.push(results.row.item(i))
    }
    df.resolve(tab);
  }
  function errCB(tx, e) {
    df.reject(e);
  }
}

querySql('select query for a table').done(function(result) {
   console.log(result); 
}
于 2013-01-30T01:21:15.110 回答