【问题标题】:Variable value changing for no apparent reason无明显原因的变量值变化
【发布时间】:2015-11-19 21:35:58
【问题描述】:

我知道这个问题的答案可能很明显,但我似乎被卡住了,所以我决定问一个问题。

在我的 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
}

有人知道为什么吗?

提前致谢。

【问题讨论】:

  • 它没有被重置,它是在一个异步调用中设置的 - 你的 if 逻辑在调用完成之前正在运行。

标签: javascript jquery variables scope


【解决方案1】:

我相信这是因为$.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

【讨论】:

  • 感谢您的回答 - 这真的很有帮助,Adjit。
猜你喜欢
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 2019-05-28
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
相关资源
最近更新 更多