2010-11-22 13 views
0

ich Probleme mit der folgenden Situation habe:

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

      } 

Mein 'testvar' einfach gewohnt den richtigen Wert zurück. Irgendwelche Ideen?

+0

Sie müssen das Konzept der Rückrufe in Javascript verstehen und wie es in jquery verwendet wird. Sobald Sie die $ .get() einzige Sache gestartet haben, können Sie sicher sein, NACH dem Erhalten zu laufen, ist der Rückruf. Sie können andere Sachen von dort anrufen. Der Code in Zeilen unterhalb von $ .get() ist irrelevant – naugtur

Antwort

3

Der Ajax-Aufruf ist asynchron. Das letzte console.log wird also ausgeführt, bevor die Anfrage beendet ist. Sie müssen die gesamte Verarbeitung durchführen, die die Ergebnisse der Anforderung in der Rückruffunktion erfordert. Eine andere Option wäre $.ajax mit der Option async: false. Dies kann jedoch den Browser sperren, bis die Anfrage beendet ist!

1

Sie könnten es entweder synchron ausführen. Ich denke, dass es möglich sein sollte Ihre $ .get() mit so etwas zu wickeln:

$.ajaxSetup({ async: false }); 

$.get(); 

$.ajaxSetup({ async: true }); 

Eine bessere Lösung wäre, um tatsächlich die Callback-Methode zu verwenden, um handhaben, was Sie passieren soll, wenn die Altersprüfung ist erledigt.

function ageCheckCallback(data) { 
// Update form 
}