2015-11-19 29 views
0

我知道这个问题的答案可能很明显,但我似乎被卡住了,所以我决定提出一个问题。变量值没有明显的原因变化

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

有谁知道为什么?

在此先感谢。

+0

它没有复位,它正在建立一个异步调用 - 并且在调用完成之前您的“if”逻辑正在运行。 – tymeJV

回答

2

我相信这是因为$.post()是一个异步函数。意思是,你的Javascript继续运行,而$.post()仍在运行。你的JS不会等待它返回。因此,通过时间的控制台日志logged它仍设置为0

所以,事实上,它不会被重置,只是还没有被设置为1

为了解决这个问题,你可以设置一个变量你的发表声明并检查是否完成。

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

+0

感谢您的答复 - 这真的很有帮助,Adjit。 –