2010-02-03 27 views
2

環境存儲在表中的新數據頁:PHP/MySQL的/ jQuery的
jQuery的 - 時刷新整個瀏覽器會話

我想刷新頁面(例如:的index.php),當新的數據存儲進入表格(例如:new_entry_table)檢查每一分鐘。同一頁面將在許多機器(PC瀏覽器)中一次打開,每次新數據出現時都應該刷新。使用jquery和數據庫檢查

我嘗試以下:

setInterval(function(){ 
$.post("new_data_check.php", function(data) { 
    if(data > 0){ 
     $("#container").fadeOut('fast').load(location.reload()); 
    } 
    }); 
    return false; 
},60000); 

new_data_check.php:
:檢查在TEST_DB新數據 其中 newdata_field = 0;
:如果有任何新的 數據出現回顯「1」;並更新 newdata_field = 1;不斷地停止 刷新頁面。
:else echo 「0」;
:只是一個觸發

所以上面的jQuery代碼檢查new_data_check.php每1分鐘爲觸發,如果任何觸發出現將刷新container.But其得到刷新只有一個打開的會話的其他會議開幕(在其他瀏覽器或其他電腦)沒有刷新。

建議更好的方法來做到這一點。謝謝。

回答

3

您的new_data_check.php文件需要跟蹤獨立查看頁面的所有用戶。

如果沒有,會出現這種情況:

  • 用戶1和用戶2都登錄到該網站。
  • 用戶1在用戶1之前5秒進行檢查,有新數據。
  • 用戶1完成了他的請求。服務器清除new_data位。
  • 用戶2的請求在5秒後到達。根據他的請求,但在這一點上,用戶1已將new_data字段設置爲0.他的數據已過時,但用戶1已有效地選擇了他。

從外觀上看,您沒有提供任何可識別用戶的信息 - 除非服務器正在確定使用IP地址。如果是這種情況,請記住,小型網絡背後的每個人都有可能擁有相同的外部IP地址。所以它不能告訴辦公室裏的人。

你可以做的是爲每個會話生成某種獨特的散列,並將其傳遞給瀏覽器。然後JavaScript可以提供相同標記的php腳本。

沒有任何特殊位的另一種解決方案是將時間戳與請求一起傳遞。本質上,客戶說:「我的最新數據到達9:21:53 PM」然後服務器檢查並響應「我的最新數據是在此之前創建的,所以你仍然很好。」或「我有在9:22:53 PM創建或修改的東西,你應該下載它。「

用這種方法,你不需要擔心誰是誰。相反,您需要對正在檢查陳舊性的數據進行修改/創建時間。您還需要確保客戶端時鐘已正確同步 - 更好的是,不要相信客戶端的日期和時間信息。也許利用你的new_data_check.php爲腳本提供一個可以在後續請求中傳遞的時間戳。

+0

感謝Koobz的回覆。我試試你的解決方案並回復你。 – Webrsk 2010-02-03 10:13:28