麻烦JS变量

时间:2012-06-02 12:02:09

标签: jquery variables global-variables

我已经关注了代码:

$("#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()之外访问这些值,这是我要修改的内容吗?

3 个答案:

答案 0 :(得分: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();

});

答案 1 :(得分:0)

$ .post()是异步的,因此在获得age的值之前会调用第二个alert()。

为了使它工作,你必须使用$ .ajax(),它允许同步发布。

答案 2 :(得分:0)

年龄获得$ .post回调的价值。并且这个回调的响应消耗时间。 javascript不要等待$ .post的响应并立即运行alert(年龄)。