在此代码中首先显示abc警告然后我的函数调用和显示功能警报WHY ..?但在此代码中我首先调用我的函数,所以为什么abc警告首先显示..?
function GetDefaultChanter(){
db.transaction(function (tx){
tx.executeSql('SELECT Value FROM Setting where Key = "DefaultChanter";',[],querySuccessDefaultChanter);},
errorCB);
}
function querySuccessDefaultChanter(tx,result){
$.each(result.rows,function(index){
var row = result.rows.item(index);
var chantervalue = row["Value"];
alert(chantervalue);
$('#defaultchanterid').val("chantervalue");
});
}
$(document).ready(function (e) {
GetDefaultChanter();
var abc = $('#defaultchanterid').val();
alert(abc);
});
答案 0 :(得分:0)
根据您的设置,您的do.transaction方法似乎是异步的。这意味着当您调用GetDefaultChanter时,对do.transaction的调用不会阻止GetDefaultChanter完成。然后执行下一行包括警报,而do.transaction基本上在后台运行。每当该方法完成其工作时,它将调用您的回调方法,并且可以随时发生。
答案 1 :(得分:0)
alert(abc)
首先触发,因为executeSql()
是异步的,因此您希望在查询完成后运行任何内容,您需要放置该代码或从回调querySuccessDefaultChanter()
调用它功能
Asynchronous vs Synchronous, what does it really mean?
附注:Web SQL Database已弃用,不再维护。我建议为新代码切换到其他内容,例如IndexedDB。
答案 2 :(得分:0)
javascript中的数据库事务没有阻止。它们是异步执行的。由于db.transaction
在执行alert(abc)
之前未完成,因此会显示警报提示。您需要在成功回调中显示警报,如下所示
function GetDefaultChanter(){
db.transaction(function (tx){
tx.executeSql('SELECT Value FROM Setting where Key = "DefaultChanter";',[],querySuccessDefaultChanter);},
errorCB);
}
function querySuccessDefaultChanter(tx,result){
$.each(result.rows,function(index){
var row = result.rows.item(index);
var chantervalue = row["Value"];
alert(chantervalue);
$('#defaultchanterid').val("chantervalue");
//alert handled in callback
var abc = $('#defaultchanterid').val();
alert(abc);
}
});
$(document).ready(function (e) {
GetDefaultChanter();
});
答案 3 :(得分:0)
同样我累了这样
function GetDefaultChanter(){
db.transaction(function (tx){
tx.executeSql('SELECT Value FROM Setting where Key = "DefaultChanter";',[],querySuccessDefaultChanter);},
errorCB);
}
function querySuccessDefaultChanter(tx,result){
$.each(result.rows,function(index){
var row = result.rows.item(index);
var chantervalue = row["Value"];
alert(chantervalue);
$('#defaultchanterid').val("chantervalue");
});
}
$(document).ready(function (e) {
GetDefaultChanter();
var abc = $('#defaultchanterid').val();
alert(abc);
});
但在这里我只使用alert和console.log