我知道这个问题的答案可能很明显,但我似乎陷入了困境,所以我决定提问。
在我的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 :(得分: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