2015-08-25 114 views
1

我在這裏編碼一個相當簡單的功能。我使用cookies來限制用戶每天五張選票(不完美,實際上很容易解決,但客戶堅持,沒有用戶帳戶,所以這是下一個最佳選擇)。更改Cookie與Ajax:奇怪的延遲

因此,我在Javascript中使用Ajax調用來實時更改Cookie - 每次用戶單擊「表決」按鈕時,Ajax都會對一個將cookie值減1的PHP文件進行會談。

但是有一個奇怪的延遲發生。我已經告訴Ajax將console.log的cookie值(在PHP文件中回顯),並且在日誌中得到一個延遲值。 Cookie的起點爲5,所以當我點擊'投票'一次時,我應該得到一個console.log'4',因爲該值減1,然後記錄。相反,我得到'5'。下一次,應該是'3',我會'4',等等。

我的代碼張貼如下。我真的不知道在這裏做什麼 - 我已經仔細考慮了代碼,除非我的頭腦無法正常工作,否則我不明白爲什麼這不起作用。

AJAX調用:

$.ajax({ 
    type: "GET", 
    url: "includes/user_vote.php", 
    success: function(data){ 
     console.log(data); 
    }, 

    error: function(jqXHR, textStatus, errorThrown){ 
     //log the error if the ajax function fails 
     console.log(textStatus); 
     console.log(errorThrown); 
    }, 

    complete: function(data){ 

    } 
}); 

user_vote.php:

if($_COOKIE['votes_left'] <= 0){ 
    $newVal = 0; 
} else { 
    $newVal = $_COOKIE['votes_left'] - 1; 
} 

setcookie('votes_left', $newVal, strtotime('today 23:59'), "/"); 
echo $_COOKIE['votes_left']; 

有一個小更多的PHP,而不是直接相關的,但無論如何,在這裏張貼。它在index.php上運行以設置cookie,如果它尚未設置。

if(!isset($_COOKIE['votes_left'])){ 

    $votes = 5; 
    $time = date('h:i:s'); 

    setcookie('votes_left', $votes, strtotime('today 23:59'), "/"); 
    setcookie('set_time', $time, strtotime('today 23:59'), "/"); 

} 
+0

是**所有**你的'PHP'代碼?如果有更多請添加它。 – Script47

+0

嘿 - 這是user_vote.php中的所有PHP代碼。爲什麼,應該有更多? – CGriffin

+0

唯一的其他PHP是最初設置cookie,如果它尚未設置,正確在index.php。將它添加到主帖子中。 – CGriffin

回答

0

正如文章中,我將在下面鏈接中提到,Cookie的超級全球只會顯示在您請求的頁面,爲此你永遠不會看到你剛纔設置的值時的值。檢查這篇文章的更多細節

PHP cookie has a one refresh delay

+1

如果您的回答基本上與您鏈接到的帖子中所述內容相同,則應該將此標記爲重複項而不是發佈僅鏈接回答。 – Barmar

+0

好的,謝謝。不只看起來像鏈接到我,但嘿。 –