为什么我的函数稍后调用,显示此警报并显示第一个文件就绪警报.....?

时间:2017-03-09 07:20:03

标签: javascript jquery sequence document-ready function-calls

在此代码中首先显示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);

});

4 个答案:

答案 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();

});

https://developer.apple.com/library/content/documentation/iPhone/Conceptual/SafariJSDatabaseGuide/UsingtheJavascriptDatabase/UsingtheJavascriptDatabase.html#//apple_ref/doc/uid/TP40007256-CH3-SW4

答案 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

http://jsfiddle.net/o2gxgz9r/3841/