1

我有以下代码:

$("#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(),为此我需要修改什么?

4

3 回答 3

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();

});
于 2012-06-02T12:05:06.433 回答
0

$.post() 是异步的,所以第二个 alert() 在你得到 age 的值之前被调用。

要使其工作,您必须使用允许同步发布的 $.ajax() 。

于 2012-06-02T12:09:44.057 回答
0

年龄获取 $.post 回调的值。并且此回调的响应会消耗时间。javascript 不等待 $.post 的响应并立即运行警报(年龄)。

于 2012-06-02T12:10:11.673 回答