2017-03-09 4 views
1

このコードの最初の表示abc警告とその後の関数呼び出しと表示関数の警告WHY ..?しかし、このコードでは、私は最初になぜ私の関数を呼び出す?なぜ私の関数呼び出しは、このアラートを表示し、最初のドキュメント準備完了の警告を表示した後.....?

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

DBトランザクションがブロック化されていません。それらは非同期に実行されます。 alert(abc)が実行される前にdb.transactionが完了していないため、アラートプロンプトが表示されます。あなたは

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

0

設定に基づいて、do.transactionメソッドは非同期です。つまり、GetDefaultChanterを呼び出すと、do.transactionへの呼び出しはGetDefaultChanterの完了をブロックしません。 do.transactionは基本的にバックグラウンドで動作しますが、警告を含めて次の行が実行されます。そのメソッドが作業を完了すると、コールバックメソッドが呼び出され、いつでも実行できます。

0

alert(abc)最初の火災executeSql()は非同期であるため、あなたは、クエリが完了した後に実行したいので何でも、あなたはそのコードを入れたり、コールバックquerySuccessDefaultChanter()関数からそれを呼び出す必要があります。

Asynchronous vs Synchronous, what does it really mean?

サイドノート:Web SQL Databaseは廃止され、もはや維持されています。 IndexedDBのような新しいコードに切り替えることをお勧めします。

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); 

}); 

このようなしかし、ここで私が唯一の警告を使用していますが、

http://jsfiddle.net/o2gxgz9r/3841/をCONSOLE.LOGを次のように成功コールバックで警告を表示する必要があります

関連する問題