2016-08-10 68 views
1

所以我有一個問題得到了PHP $ _SESSION數組中數組元素的正確計數。我使用$ _SESSION ['user'] ['list']來存儲用戶從php頁面中選擇的項目的唯一標識符。我使用jQuery和PHP頁面來處理點擊。這部分工作完美無瑕。用戶點擊一個按鈕,按鈕的唯一標識符被添加到$ _SESSION ['user'] ['list']。從ajax調用PHP頁面更新HTML的jQuery問題。

我的問題是,我試圖動態更新菜單上使用jQuery的列表的計數。這是什麼完美無缺的工作。有時計數會更新爲正確的數字。有時它不會。我認爲這可能是一個緩存問題,但我認爲使用.post照顧緩存問題。我也試過$ .ajax緩存:false。我花了比我想承認的這個具體問題更多的時間,並且它正在啃我。

因此,這裏是應該在菜單更新HTML代碼:

$.post("listme.php").done(function(data){$('#list_count').html(data);}); 

在上面我試圖用success以及,但具有相同的問題就出來了。

現在listme.php工作正常,我測試了很多次,並且它在頁面加載時給出了正確的數字,即使菜單上的項目計數在點擊時沒有正確更新,它在後續頁面上仍然可以正常工作加載。所以我知道它正在工作(在這裏着名的最後一個詞)。 listme.php只是打印$ _SESSION ['user'] ['list']的count()。我可以在控制檯中看到響應,而且顯然是錯誤的。我點擊添加,它將它添加到會話中,但#list_count中的數字表示0.如果我重新加載頁面,count指出1.如果添加更多,它可能會跳過一兩個添加,有時它會添加一個,有時它不會「噸。會話總是會更新,如果我刷新頁面,計數是正確的。

我覺得它必須是某種緩存問題。

因此,這裏是我的.htaccess中的緩存位:

## EXPIRES CACHING ## 
<IfModule mod_expires.c> 
ExpiresActive On 
ExpiresByType image/jpg "access plus 1 year" 
ExpiresByType image/jpeg "access plus 1 year" 
ExpiresByType image/gif "access plus 1 year" 
ExpiresByType image/png "access plus 1 year" 
ExpiresByType text/css "access plus 1 month" 
ExpiresByType application/pdf "access plus 1 month" 
ExpiresByType application/x-javascript "access plus 2 month" 
ExpiresByType text/javascript "access plus 2 month" 
ExpiresByType application/javascript "access plus 2 month" 
ExpiresByType application/x-shockwave-flash "access plus 2 month" 
ExpiresByType image/x-icon "access plus 2 year" 

</IfModule> 
## EXPIRES CACHING ## 

任何想法,我做錯了無論是在jQuery代碼或我的.htaccess?

+0

沒有什麼神奇的事情。 PHP可能*被緩存,但不太可能。 [看這張圖片獲取緩存資源](http://i.stack.imgur.com/uJKew.png)。如果你有一些低端的託管服務提供商,那麼他們可能會做一些你無法控制的PHP級別的緩存,但這是一個討論的另一天。我的直覺告訴我,你的PHP腳本中的邏輯存在一些問題,並且它正在輸出錯誤的項數。做一個簡單的測試,看看你得到了什麼... – MonkeyZeus

+0

保持所有的jQuery和.htaccess相同,並嘗試** listme.php **:'<?php session_start();如果(!isset($ _ SESSION ['count'])){$ _ SESSION ['count'] = 0;} $ _SESSION ['count'] ++;回聲$ _SESSION [ '數'];' – MonkeyZeus

+0

數據大小\t 過期\t 太陽2106年2月7日01:28:12 GMT-0500(東部夏令時間) 讀取計數\t 上次讀取\t 星期三2016年8月10日14:43:33 GMT-0400(東部標準時間) 最後修改日期\t 星期三十二月31 1969 19:00:00 GMT-0500(東部夏令時) – mmundiff

回答

0

根據我們在聊天中的討論,最終的解決方案是更新會話計數並輸出一次計數。

一些東西,可能會或可能不會幫助是確保該頁面沒有得到緩存:

header('Expires: Mon Aug 01 2016 01:28:15 GMT'); 
+0

是的,我試圖更新會話中的計數,然後使用單獨的調用來更新與相同的PHP腳本計數的HTML。無論出於何種原因,通過jquery調用相同的腳本兩次以非常快的速度發生問題。我仍然不確定這是緩存問題還是jQuery試圖緩解可能的服務器濫用問題。無論哪種方式@MonkeyZeus建議做更新,並在同一個電話中返回計數,這是我的問題的答案。非常感謝@MonkeyZeus! – mmundiff

+0

@mmundiff我只是想讓你知道,快速繼承爲什麼會導致你的問題是因爲AJAX是異步的,所以很可能Request1離開Web瀏覽器,然後是Request2。無論出於什麼原因(網絡速度慢,路由慢,服務器速度慢),Request2都會先返回到瀏覽器,這樣就執行了'success()'塊,然後Request1又回來了,它的'success()'塊也被執行了。但問題是,Request1有舊數據,發生得太快了。我有一種感覺,緩存在你的情況下從來不是問題。 – MonkeyZeus

+0

很好的解釋。再次感謝 – mmundiff