0

我试图从查询中返回值,但是当我提醒我的 var 时,它说它未定义。下面是我的代码

function countRows(){
    db.transaction(function (tx){
        tx.executeSql('SELECT id FROM Courses', [], function (tx, results) {
            var len = results.rows.length;
            return len;
        });
 });

}

var test = countRows();
alert(test);
4

2 回答 2

0

问题是您返回len到错误的功能。在这种情况下len被返回到由定义的函数function (tx, results) {。我认为最好的解决方案是添加一个回调来返回答案。

function countRows(callback){
    db.transaction(function (tx){
        tx.executeSql('SELECT id FROM Courses', [], function (tx, results) {
            var len = results.rows.length;
            callback(len);
        });
     });

}

var test;
countRows(function(len){
    alert(len)
    test = len;
});

请记住,此代码尚未针对这种情况进行测试。

编辑:我忘记了异步运行的javascript。我已经更改了代码,因此它应该更新test并发出警报,但是如果您希望代码按原计划运行,您将不得不做一些特别的事情或者只是将所有代码放入回调中。

于 2013-08-22T00:16:57.220 回答
0

对我来说,这似乎是一个关闭问题。请参阅此处的Javascript 闭包。由于您的目的是提醒 len 的值,我创建了以下代码并且它适用于我,var len 被正确提醒。尽管您必须修改 dbTran 函数并添加必要的代码。

function countRows()
{    
    var dbTran = function() { var len = 123; alert(len);};         
    return dbTran();
}    
countRows();
于 2013-08-22T01:47:39.547 回答