变量值无明显变化

时间:2015-11-19 21:35:59

标签: javascript jquery variables scope

我知道这个问题的答案可能很明显,但我似乎陷入了困境,所以我决定提问。

在我的jQuery $(document).ready函数中,我创建了一个名为logged的变量。我已将其设置为:var logged = 0;

接下来我有一个后期代码块,根据返回的数据将logged变量设置为1或不更改它。

$.post("url/script.php",
function(d, s){
    if (s) {
        if (d == "1") {
            logged = 1;
        }
        if (d == "0") {
            //Do stuff
        }
    } else {
        //Do other stuff
    }
    console.log(logged); //Prints 1
}); 

在下面我有一个if语句,它会检查是否记录1,但上面的console.log命令显示logged变量已重置为0

console.log(logged); //Prints 0

if (logged == 1) {
    //Do stuff
}

有谁知道为什么?

提前致谢。

1 个答案:

答案 0 :(得分:2)

我认为这是因为$.post()是一个异步函数。这意味着,当$.post()仍在运行时,您的Javascript会继续运行。你的JS不会等待它返回。因此,当您的控制台记录logged时,它仍然设置为0

事实上,它没有重置,它还没有被设置为1

要解决此问题,您可以为post语句设置一个变量,并检查它是否已完成。

  var posting = $.post( url, function() );

  posting.done(function( data ) {
    //do something when complete
  });

您可以在jQuery的API中了解更多相关信息 - http://api.jquery.com/jquery.post/

您还应该看一下这个问题,该问题解决了$.post()同步通话的问题how to make a jquery "$.post" request synchronous