2017-03-09 1 views
1

dans ce code Premier affichage abc Alerte Et puis ma fonction Appel et affichage Dans la fonction Alerte POURQUOI? Mais dans ce code j'appelle d'abord ma fonction alors pourquoi abc affiche-t-elle d'abord ..?Pourquoi ma fonction appelle-t-elle plus tard, après avoir affiché cette alerte et afficher l'alerte de premier document prêt .....?

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

}); 

Répondre

0

Les transactions DB en javascript ne bloquent pas. Ils sont exécutés de manière asynchrone. Étant donné que db.transaction n'est pas terminée avant l'exécution de alert(abc), l'invite d'alerte s'affiche. Vous devez montrer alerte dans le rappel de succès comme suit

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

Selon votre configuration, votre méthode do.transaction est asynchrone. Cela signifie que lorsque vous appelez GetDefaultChanter, l'appel à do.transaction n'empêche pas GetDefaultChanter de se terminer. Ensuite, les lignes suivantes sont exécutées, y compris votre alerte, tandis que do.transaction fonctionne essentiellement en arrière-plan. Chaque fois que cette méthode termine son travail, elle appelle votre méthode de rappel et cela peut arriver à n'importe quel moment.

0

Les alert(abc) feux d'abord parce que executeSql() est asynchrone et donc tout ce que vous voulez exécuter après la requête est terminée, vous aurez besoin de mettre ce code ou appeler de la fonction de rappel querySuccessDefaultChanter().

Asynchronous vs Synchronous, what does it really mean?

Side note: Web SQL Database est dépréciée et ne sont plus maintenus. Je recommande de passer à autre chose pour le nouveau code tel que IndexedDB.

0

De même, je fatigué comme ça

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

}); 

mais ici je suis en utilisant uniquement alerte et CONSOLE.LOG

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