我有点麻烦...... 我试图将查找结果作为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);
});
}
警报显示正确的变量,但控制台日志显示未定义。 对此欢迎任何帮助...
答案 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的回调