这取自我的另一个问题。下面的代码是作为答案给出的,虽然我不太确定它中发生了什么。
目的是只在开始时获取一次userid,而不是每次调用fetchupdate()时都获取它。
var delay = 300000, userIdFetched = false;
function GetUpdate(status)
{
if(status == "fail")
{
setTimeout(function(){
fetchupdate();
},delay * 2);<-- need to make this double itself
}
else
{
setTimeout(function(){
fetchupdate();
},delay);
}
};
function fetchupdate(){
var userid=$_SESSION['UserID'];
$.ajax()
{
type:"POST",
url:"getupdates.php",
data:{userid: userid},
complete:function(data,status)
{
if(status == true)
{
if(!userIdFetched){ <----Why is this set to !userIdFetched instead of userIdFetched
userIdFetched = true;
//Get the user Id here
}
$("#Updates").text(data);
GetUpdate("success");//Changed to String
}
else
{
$("#Updates").text("You have no updates.")
GetUpdate("fail");//Changed to String
}
}
}
}
问题:
为什么if条件设置为
if(!userIdFetched)
评估为(!false) - &gt; if(true),这会导致if块中的代码运行,之后userIdFetched设置为true?
不应将if条件设置为
if(userIdFetched)
应该导致if块中的代码运行,之后userIdFetched将设置为true,以表示正在获取的用户ID?
如果可能的话,我希望有人为我澄清这一点。
答案 0 :(得分:0)
不,它应该是if(!userIdFetched)
,因为您只需要在if
为userIdFetched
时输入false
- 阻止。如果是true
,则无需输入if
- 块。
将其视为大致相当于:
可能会有所帮助if(userIdFetched == false)
尽管x == false
和!x
在某些“假名”值(demonstration)方面有所不同。在您的情况下,由于您只处理布尔值,因此这不是问题。