2010-11-22 35 views
0

我在遇到以下情況的問題jQuery的/ javascript變量範圍問題:

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

      } 

我「的testvar」只是不會返回正確的值。有任何想法嗎?

+0

您需要了解javascript中的回調的概念以及它在jQuery中的使用方法。一旦你開始了$ .get()唯一的事情,你可以確保運行後獲取是回調。你可以從那裏調用其他東西。 $ .get()下方的代碼無關緊要 – naugtur 2010-11-22 14:37:52

回答

3

ajax調用是異步的。在請求完成之前,最後執行console.log。您必須在回調函數中執行所有需要請求結果的處理。

另一種選擇是使用$.ajaxasync: false選項。但是,這可能會鎖定瀏覽器,直到請求完成!

1

您可以同步運行它。我認爲應該是可能包裝您的$獲得(),像這樣的東西叫:

$.ajaxSetup({ async: false }); 

$.get(); 

$.ajaxSetup({ async: true }); 

一個更好的解決辦法是實際使用回調方法來處理任何你想要的時候了時代的檢查是發生完成。

function ageCheckCallback(data) { 
// Update form 
}