2010-11-22 26 views
0

$ Je rencontre des problèmes avec la situation suivante:Jquery/Javascript problème de portée variable avec .get

leeftijd:function(){ 
       var testvar = "untouched"; 

       var d = $('#gebdatumdd').val(), 
        m = $('#gebdatummm').val(), 
        y = $('#gebdatumjjjj').val(); 

       x = "none!"; 

       $.get("assets/incl/ageCheck.php", {y:y, m:m, d:d}, 
        function(data){     
         console.log(data); // returns 'green';  
         console.log(testvar); // returns 'untouched';  
         testvar = data; // write data in testvar; 
         console.log(testvar); // returns 'green'; 
       }); 

       console.log('outside: ' + testvar); // returns 'untouched'; 

      } 

Mon 'testvar' juste retour wont la bonne valeur. Des idées?

+0

Vous devez comprendre le concept des rappels dans javascript et comment il est utilisé dans jquery. Une fois que vous démarrez la seule chose $ .get(), vous pouvez être sûr d'exécuter APRÈS obtenir le rappel. Vous pouvez appeler d'autres choses à partir de là. Le code dans les lignes ci-dessous $ .get() n'est pas pertinent – naugtur

Répondre

3

L'appel ajax est asynchrone. Donc, ce dernier console.log est exécuté avant que la requête ne soit terminée. Vous devez effectuer tous les traitements nécessitant les résultats de la demande dans la fonction de rappel. Une autre option utiliserait $.ajax avec l'option async: false. Cependant, cela peut bloquer le navigateur jusqu'à ce que la requête soit terminée!

1

Vous pouvez l'exécuter de manière synchrone. Je pense qu'il devrait être possible d'envelopper votre .get de $() appeler avec quelque chose comme ceci:

$.ajaxSetup({ async: false }); 

$.get(); 

$.ajaxSetup({ async: true }); 

Une meilleure solution serait d'utiliser effectivement la méthode de rappel pour gérer tout ce que vous voulez arriver lorsque le contrôle de l'âge est terminé.

function ageCheckCallback(data) { 
// Update form 
}