2012-06-02 147 views
1

我下面的代碼:掌握JS變量麻煩

$("#get_details").click(function(){ 
    name = $("#user_name").val(); 
    var age,gender; 
    $.post("users.php", { name: name }, 
    function(data){ 
     if (data.status == 'success'){ 
     age = data.message[0]; 
     gender = data.message[1]; 
     alert(age); //getting output 
     } 
    }, "json"); 

    alert(age);//doesn't getting output 
}); 

我想訪問外,這些值$.post(),對於這個我所要修改?

+0

第一次點擊第二次警報不起作用,但第一次點擊後它正在工作 – Yashwant

回答

1

首先,var將它們定義在本地範圍內。如果沒有var,則可以從全局對象window(如window.agewindow.gender)訪問它們。

但是您的第二個警報不起作用,因爲它被調用時,$.post將不會完成,因爲它是異步的。您可以這樣做:

$("#get_details").click(function(){ 

    var name = $("#user_name").val(); 
    var age,gender; 
    var json_ready = false; 

    $.post("users.php", { name: name },function(data){ 
     json_ready = true; 
     if (!data.status == 'success') return; 

     age = data.message[0]; 
     gender = data.message[1]; 
    }, "json"); 

    var json_alert = function(){ 
     if(!json_ready) return setTimeout(function(){ json_alert(); },1000); 
     alert('gender: '+gender+', age: '+age); 
    } 

    json_alert(); 

}); 
+0

兩個警報都可以訪問本地'age'變量;這不是問題。 – pimvdb

+0

是的,我已經閱讀了代碼,然後糾正。 –

+0

@ GRIGORE-TURBODISEL如何將'$ .post'轉換爲'$ ajax' – Yashwant

0

$ .post()是異步的,所以第二個alert()在獲取age的值之前調用。

要使其工作,您必須使用$ .ajax(),它允許synchorous後。

0

年齡在$ .post的回調中獲得價值。並且此回調的響應消耗時間。 javascript不會等待$ .post的響應,並立即運行警報(年齡)。