2015-11-19 91 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。 –