返回的变量为';未定义';通过javascript函数
我有点麻烦。。。 我试图将查找结果作为web应用程序的一部分,但遇到了一点小麻烦 我有一个只需点击按钮即可运行的功能:返回的变量为';未定义';通过javascript函数,javascript,sql,Javascript,Sql,我有点麻烦。。。 我试图将查找结果作为web应用程序的一部分,但遇到了一点小麻烦 我有一个只需点击按钮即可运行的功能: $(function() { $('#bnt_fund_8y').click(function() { console.log(dbCheck("study_mode")); } }); 此dbCheck功能消失,并检查本地数据库,以查看在以下功能中设置了什么学习模式: dbCheck = function(dbSearch) { mydb.t
$(function() {
$('#bnt_fund_8y').click(function() {
console.log(dbCheck("study_mode"));
}
});
此dbCheck功能消失,并检查本地数据库,以查看在以下功能中设置了什么学习模式:
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);
});
}
警报显示正确的变量,但控制台日志显示未定义。
有关此欢迎的任何帮助…是一个异步调用,因此您的函数将在您发出的回调事务发生之前返回(不返回任何值)。代码中的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);
});
}
});
不返回任何内容,因此您得到的值是未定义的。由于transaction
似乎是一个带有回调函数的异步调用,因此返回的唯一有用的东西是承诺dbResult
您不能从异步调用的回调中返回任何内容。对结果也使用回调:
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);
});
据我所知
函数dbCheck根本没有返回任何内容
mydb.Transaction是实际返回某些内容的函数
正如其他人所指出的,mydb.transaction是异步的
你应该加上
console.log(dbResult);
将回调传递到mydb.transaction中,这是一种非常有趣的支撑方式。
console.log(dbResult);