2012-06-02 109 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的响应,并立即运行警报(年龄)。