2011-12-20 57 views
1

我創建一個web應用程序,我需要一些方法來做到在jQuery和PHP如下:jQuery的即時通知

  • 的jQuery發送到PHP頁面
  • PHP頁面檢查的請求如果有任何新的東西,如果沒有,檔jQuery的請求,直到有
  • jQuery的獲取響應,併發送另一個請求,重複上述過程

我已經試過長輪詢方法,在谷歌與jQu但他們差不多都是這樣做的。這是我正在尋找的東西。

任何幫助表示讚賞。

謝謝。

+1

你所描述的WebSockets *爲*長輪詢,有什麼不好做呢? – 2011-12-20 21:41:11

+0

檢查此:http://stackoverflow.com/questions/6433356/jquery-ajax-php-long-polling – 2011-12-20 21:41:40

回答

1

正如一個前兆,如果你走這條路線,你也應該確保你的會話沒有按要求鎖定。當您提出請求時會話被鎖定時,您可能很容易遇到這種情況。

作爲一個更好的選擇,您可能希望通過每30秒請求一次PHP頁面來解決「解決方案心跳」問題。 (這與StackOverflow類似)確實聽到通知您何時有新消息進來。

甚至更​​好的是比,那將是在node.js中使用WebSockets。當有新的內容出現時,你甚至可以讓PHP通知node.js,就像你說的那樣,這樣它總是準確的,而且你沒有一些PHP腳本不斷運行。

通過socket.io

0

您是否嘗試過在每次PHP返回沒有更新時都會啓動的JS中的settimeout?

所以:

是通過Ajax( checkPHP())檢查PHP
  • 調用JS功能。
  • PHP認爲沒有新的價值,回報例如
  • 在數據「0」接收功能的AJAX功能,檢查返回,如果返回值== 0:settimeout(checkPHP,5000);
  • 如果返回值!= 0,做你的事情。
  • 你可以只要顯示等待圖標,返回值!= 0
+1

這很簡單*輪詢*,這是既浪費帶寬,而不是'即時',因爲通知交付直到[輪詢頻率]幾秒鐘後。 – josh3736 2011-12-20 21:46:07

+0

確實如此,但我沒有看到你如何保持一個PHP腳本無限期地運行,直到新的東西到達。這會更加令人討厭,它也會超時等等。在我看來,「即時」幾乎總是輪詢的變體,但也許我只是無知而已。 – 2011-12-20 21:51:01

+0

您可以在PHP中進行套接字連接,看起來好像有幾個人[在PHP中實現WebSocket服務器](https://www.google.com/search?q=php+websockets)(儘管很多那些實現了過時版本的協議)。 – josh3736 2011-12-21 16:09:56