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);
});

すべてのシナリオで、変数は null です。これを行う別の方法はありますか。どんな提案も役に立ちます。

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 に答える