Javascript 返回';未定义';函数中的变量
我是javascript新手,无法找到解决方案。 我读过一些类似的问题,但看起来问题与我的不一样 我使用以下代码从script1调用一个方法:Javascript 返回';未定义';函数中的变量,javascript,html,sqlite,Javascript,Html,Sqlite,我是javascript新手,无法找到解决方案。 我读过一些类似的问题,但看起来问题与我的不一样 我使用以下代码从script1调用一个方法: function turnPage(){ var current = window.now; var nextpage = getNextPage(current); alert(nextpage); } 在script2中有一个SQLite等: function getNextPage(Pid) { db.trans
function turnPage(){
var current = window.now;
var nextpage = getNextPage(current);
alert(nextpage);
}
在script2中有一个SQLite等:
function getNextPage(Pid) {
db.transaction(function(tx) {
tx.executeSql('SELECT * FROM Page WHERE Pid=' + Pid, [],
function(tx, results) {
nextp = parseInt(results.rows.item(0).NextPage);
//alert(nextp);
return nextp;
}, errorCB);
}, errorCBQuery);
}
如果在被调用函数中使用警报对话框,则变量nextp为2。
但如果我返回变量,它将作为“未定义”发出警报。
另外,如果我etc使变量var nextp=11;通过“db.transaction…”和函数末尾的return语句,它将返回11而不是2
这是因为在我的函数开始时变量没有发送到内部函数吗?:)
你知道怎么做吗?谢谢 您的外部函数在任何时候都不会实际返回
nextp
对于(我认为)你将要做的事情,有两种解决方案
nextp的值存储在那里
nextp
的值,例如,创建新链接或其他内容。如果需要,可以将代码放在另一个函数中,并将其作为参数传递到getNextPage()
或将代码直接放在最内部的函数中(在警报
调用的位置)getNextPage()
完成时,即使您的getNextPage()
也无法返回内部查询的值,因为该值不存在
无论如何,可以删除最内部函数中的
return
语句,因为没有函数实际接收该值。我不知道javascript中的SQLite是如何工作的,但我怀疑它是异步工作的,因此,您在turnPage
中调用alert
,但事务正在异步运行,返回值仍在另一个范围内。您可以尝试将回调函数传递给getNextPage
,然后使用nextp
作为参数调用回调,而不是返回nextp
:
function turnPage(){
var current = window.now;
getNextPage(current, function (nextp) { alert(nextp); /* do whatever else you need to do */ });
}
function getNextPage(Pid, cb) {
db.transaction(function(tx) {
tx.executeSql('SELECT * FROM Page WHERE Pid=' + Pid, [],
function(tx, results) {
nextp = parseInt(results.rows.item(0).NextPage);
cb(nextp);
}, errorCB);
}, errorCBQuery);
}
现在,您的代码有几个问题
nextpage = getNextPage(current);
alert(nextpage);
将调用getNextPage()
,但它不会等待响应后再继续,因此警报将立即触发,此时,如果响应尚未返回和分配(很可能是这种情况),则nextpage
将未定义丹,成功了!(如果有人使用此代码,则提示中有输入错误,应该是提示(nextp),而不是提示(nextpage)@user1255456记住,如果解决了您的问题,请接受答案。