我在PHP中創建了一個類似於事物的聊天框。唯一的問題是它不會自動重新加載。有沒有辦法讓它在PHP中重新加載,或者我必須移動所有東西,這樣我才能使用AJAX?另外,我的一位用戶不斷在線。如果他們按下某個鍵或在最近3分鐘內點擊並在離開頁面時將其設置爲離線,我已將其設置爲脫機。他們正在使用Firefox 9.0。這是因爲使用onunload?什麼是解決方案?PHP重新加載聊天框?
回答
您可以使用meta refresh
標籤,它可以由PHP生成,但它並不是一個真正的PHP特有功能。
<meta http-equiv="refresh" content="600">
這將刷新600秒後的內容。根據您的應用需求,您可以更準確地節約時間。
Ajax可能是檢查用戶不活動的首選方法。下面是一個類似的職位上檢查用戶活動 - How can I detect with JavaScript/jQuery if the user is currently active on the page?
UPDATE
至於如何處理用戶退出Firefox中的第二個問題,它就像你說onunload
可以不一致。這是再次使用ajax的地方。如果您的應用程序停止從客戶端接收ajax更新,則可以執行某種清理以將其標記爲非活動狀態。
我們在ASP.Net MVC應用程序中有類似的情況。我們最終使用應用程序變量來存儲最近的活動和用戶狀態。一個php例子可以是found here。
希望這會有所幫助!
您可以添加一些JavaScript來自動刷新整個頁面,但對於最終用戶來說,使用AJAX會更好。
他也可以使用jQuery並加載到一些容器腳本get.php。我寫了上面的解決方案聊天,它工作正常。 – Kobra 2012-02-20 15:34:38
我使用AJAX作爲「無需重新加載頁面而獲取某些數據」的總稱。 – 2012-02-20 15:43:58
Facebook這樣做的方式是,客戶端「Alice」有一個掛起的新消息請求約1分鐘。如果另一個客戶端「Bob」向Alice寫入消息,則服務器可以完成Alice的未決請求。然後,Alice立即獲得新消息並打開新的待處理請求。
大約一分鐘後您將不得不暫停待處理的請求,或者瀏覽器執行此操作。不同的瀏覽器有不同的超時設置,所以只需使用一些小的。在超時之後,你打開一個新的掛起請求,不會錯過任何東西。
我得到了一些代碼,以玩: listen.php(客戶端調用它來創建掛起的請求,等待事件$ EID的消息NR $ MNR
define('WAIT_MAX', 55); // wait max 55 sec
define('WAIT_INT', 1); // wait 1 sec per call
$start = time();
while ($start + WAIT_MAX > time())
{
// check if an event occured
$res = mysql_query('SELECT * FROM event WHERE `eid`="'.$eid.'" AND `mnr`="'.$mnr.'"');
if (mysql_num_rows($res) > 0)
{
// event occured
$row = mysql_fetch_assoc($res);
$msg = $row['msg'];
echo "<event eid=\"$eid\" mnr=\"$mnr\" msg=\"$msg\" />\n";
die();
//die('event occured: '.$msg."<br>\nNext mnr=".($mnr+1));
//break;
}
else
{
// no event occured
mysql_free_result($res);
sleep(WAIT_INT);
}
}
die(WAIT_MAX . ' seconds passed and no event occured.');
鮑勃發送它的消息。 yell.php提供$味精
if (isset($_GET['msg']))
$msg = $_GET['msg'];
else
$msg = 'no message given, just firing the event.';
mysql_query('INSERT INTO `event` (`eid`, `mnr`, `msg`) VALUES ("'.$eid.'", "'.$mnr.'", "'.$msg.'")');
一些的init.php,使其工作:
$eid = -1;
$mnr = -1;
if (isset($_GET['eid']) && isset($_GET['mnr']))
{
$eid = max(0, (int)$_GET['eid']);
$mnr = max(0, (int)$_GET['mnr']);
}
elseif (isset($_GET['eid']))
{
$eid = max(0, (int)$_GET['eid']);
$mnr = 1;
}
else
die('no eid given');
只要你喜歡就使用和修改這段代碼。
- 1. jQuery ajax聊天重新加載
- 2. PHP聊天框:如何自動更新
- 3. 沒有重新加載的聊天客戶端/帖子頁面
- 4. 無需按f5即可重新加載聊天內容
- 5. 幾秒鐘後重新加載聊天的另一種方式
- 6. Facebook聊天箱不會在頁面間重新加載
- 7. 當發送消息時,Socket.io聊天重新加載頁面
- 8. 正在使用Ajax自動部分重新加載太重聊天的目的?
- 9. 當聊天室的任何用戶發佈消息時,如何重新加載聊天室的消息?
- 10. PHP中的最佳聊天框類型
- 11. 在php和jQuery中優化聊天框
- 12. PHP聊天審查
- 13. Php - 實時聊天
- 14. PHP聊天會話
- 15. Android與PHP聊天?
- 16. Node.js聊天應用不加載
- 17. 實時聊天插件後加載jquery
- 18. 重新加載框架
- 19. 框架不重新加載
- 20. Jquery ajax聊天 - 消息不會自動重新加載每2秒?
- 21. 重新加載使用AJAX的頁面,以創建一個即時聊天
- 22. 如何加快jQuery/php/ajax聊天室?
- 23. 加密聊天java
- 24. PHP重新加載內容
- 25. PHP/jQuery重新加載DOM
- 26. 重新加載頁面時通過PHP重新加載gifs
- 27. 聊天插件或框架
- 28. Android Studio:聊天框佈局
- 29. 簡單的jquery聊天框
- 30. Java簡單聊天框
是的,我使用AJAX將某人標記爲離線。因爲我們在他們離開頁面時處於不活動狀態時使用了相同的功能,所以此功能似乎不適用於Firefox 9.0 – CoffeeRain 2012-02-20 15:35:00
@shanabus,這是兩個問題,第二個問題甚至沒有詳細信息。 – Alexander 2012-02-20 15:35:47
@亞歷山大,我想我現在已經談到了這個問題的第二部分。謝謝! – shanabus 2012-02-20 15:44:21