为什么我的函数稍后调用,在显示此警报并显示第一个文档就绪警报之后......?
why my function call later, after display this alert and display first document ready alert.....?
在此代码中首先显示 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);
});
根据您的设置,您的 do.transaction 方法似乎是异步的。这意味着当您调用 GetDefaultChanter 时,对 do.transaction 的调用不会阻止 GetDefaultChanter 完成。然后执行下一行,包括您的警报,而 do.transaction 基本上在后台运行。每当该方法完成其工作时,它将调用您的回调方法,并且随时可能发生。
alert(abc)
首先触发,因为 executeSql()
是异步的,因此您需要在查询完成后 运行 执行任何操作,您需要放置该代码或从回调 querySuccessDefaultChanter()
函数。
Asynchronous vs Synchronous, what does it really mean?
旁注:Web SQL Database is deprecated and no longer maintained. I recommend switching to something else for new code such as IndexedDB.
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();
});
我也是这样累的
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);
});
但这里我只使用警报和 console.log
在此代码中首先显示 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);
});
根据您的设置,您的 do.transaction 方法似乎是异步的。这意味着当您调用 GetDefaultChanter 时,对 do.transaction 的调用不会阻止 GetDefaultChanter 完成。然后执行下一行,包括您的警报,而 do.transaction 基本上在后台运行。每当该方法完成其工作时,它将调用您的回调方法,并且随时可能发生。
alert(abc)
首先触发,因为 executeSql()
是异步的,因此您需要在查询完成后 运行 执行任何操作,您需要放置该代码或从回调 querySuccessDefaultChanter()
函数。
Asynchronous vs Synchronous, what does it really mean?
旁注:Web SQL Database is deprecated and no longer maintained. I recommend switching to something else for new code such as IndexedDB.
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();
});
我也是这样累的
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);
});
但这里我只使用警报和 console.log