返回的变量通过javascript函数“未定义”

时间:2012-03-29 15:36:19

标签: javascript sql

我有点麻烦...... 我试图将查找结果作为Web应用程序的一部分,但是遇到了一些麻烦。

我有一个按下按钮的功能:

$(function() {
    $('#bnt_fund_8y').click(function() {
        console.log(dbCheck("study_mode"));
}
});

此dbCheck函数消失并检查本地数据库以查看设置的study_mode,在以下函数中:

dbCheck = function(dbSearch) {
    mydb.transaction(
        function(transaction) {
            transaction.executeSql('SELECT "'+dbSearch+'" FROM funding WHERE id = 1',[], function(transaction, results) {
                var dbResult = results.rows.item(0).study_mode;
                alert(dbResult);
                return(dbResult);
            }, errorHandler);
        });
    }

警报显示正确的变量,但控制台日志显示未定义。 对此欢迎任何帮助...

4 个答案:

答案 0 :(得分:2)

transaction是一个异步调用,因此您的函数会在您给出transaction的回调之前返回(不返回任何值)。代码中的return语句不会返回dbCheck之外的任何内容,而是返回您提供的回调函数。

您需要更改功能,以及如何调用它。

功能变化:

//  add callback parameter --v
dbCheck = function(dbSearch, callback) {
    mydb.transaction(
        function(transaction) {
            transaction.executeSql('SELECT "'+dbSearch+'" FROM funding WHERE id = 1',[], function(transaction, results) {
                var dbResult = results.rows.item(0).study_mode;
                alert(dbResult);
                // Call the callback with the result
                callback(dbResult);
            }, errorHandler);
        });
    }

致电:

$(function() {
    $('#bnt_fund_8y').click(function() {
        dbCheck("study_mode", function(result) {
            console.log(result);
        });
}
});

答案 1 :(得分:0)

dbCheck = function(dbSearch) {
    mydb.transaction(
    ...
    );
}

不会返回任何内容,因此您获得的值为undefined。由于transaction似乎是一个带回调函数的异步调用,返回的唯一有用的东西是对dbResult的承诺。

答案 2 :(得分:0)

您无法从异步调用的回调中返回任何内容。对结果也使用回调:

dbCheck = function(dbSearch, callback) {
  mydb.transaction(
    function(transaction) {
      transaction.executeSql('SELECT "'+dbSearch+'" FROM funding WHERE id = 1',[], function(transaction, results) {
        var dbResult = results.rows.item(0).study_mode;
        callback(dbResult);
      }, errorHandler);
    });
  });
};

用法:

dbCheck("study_mode", function(value) {
  console.log(value);
});

答案 3 :(得分:0)

据我所知,

函数dbCheck根本没有返回任何内容。

mydb.transaction是实际返回某个东西的函数。

正如其他人都指出的那样,mydb.transaction是异步的。

你应该添加

console.log(dbResult);

进入传递给mydb.transaction的回调