2010-04-23 147 views
0

我想創建某種AJAX腳本或調用,如果有任何新消息已經到達,它們將不斷檢查MySQL數據庫。當數據庫中有新消息時,AJAX腳本應該調用一種警告框或消息框。AJAX調用連續循環?

我不是一個AJAX專家(但無論如何),並已谷歌搜索解決方案,但我很難找出從哪裏開始。我想象這是一種AJAX聊天正在使用的方法,以查看是否有任何新的聊天消息已發送。

我也嘗試在連續和無限循環中搜索AJAX(httpxmlrequest)調用,但仍然沒有得到解決方案。

我希望有人能夠幫助我使用這樣的AJAX腳本,或者讓我朝正確的方向發展。

感謝 真誠 Mestika

+0

「當在數據庫中的新郵件時,AJAX腳本應該是調用「 - 你不能混合數據庫和Web瀏覽器! – pramodc84 2010-04-23 07:09:06

回答

2

第1步 - 你需要一個服務器端頁面,你可以調用檢查,看看是否有新的已經到來。

第2步 - 你能適應從這裏連續AJAX請求腳本(它使用jQuery來簡化AJAX請求):

http://www.stevefenton.co.uk/Content/Blog/Date/201004/Blog/AJAX-and-Race-Conditions/

目前,這個腳本是排隊順序AJAX請求的列表,但你可以使用它來不斷檢查,通過改變它像這樣...

var InfiniteAjaxRequest = function (uri) { 
    $.ajax({ 
     url: uri, 
     success: function(data) { 
      // do something with "data" 
      if (data.length > 0) { 
       alert(data);// Do something sensible with it! 
      } 
      InfiniteAjaxRequest (uri); 
     }, 
     error: function(xhr, ajaxOptions, thrownError) { 
      alert(thrownError); 
     } 
    }); 
}; 

InfiniteAjaxRequest ("CheckForUpdate.php"); 

使用此腳本的好處是什麼?

好吧,而不是檢查每個「x」秒,它只會檢查一次前一個請求已收到,所以它鏈接的請求。您可以添加延遲來遏制這個不斷的請求,我強烈建議您這樣做 - 否則您會以過多的流量點擊您的網站。你會在你做完響應之後添加延遲,但在你回到「InfiniteAjaxRequest」之前。

+0

我對這是如何工作有點困惑。好像它會一直在檢查!服務器不會總是發送迴應,只是數據不會總是大於0?如果是這樣意味着連接速度越快,它提出的請求越多 - 對嗎?或者我想努力? – Andrew 2014-07-22 14:59:58

2

這是你的微調:

  • 獲取的JavaScript框架之一(jQuery的似乎是最常見的,但也有其他人)
  • 翻轉,雖然它提供了AJAX方法的文檔,選擇一種適合您的任務的方法
  • 爲您的站點構建一個請求,獲取信息並對響應作出反應(顯示消息框或更新頁面的某些部分),將其包裝在一個函數中
  • 確保請求錯誤不會變成unno通過執行一個錯誤處理程序來實現。
  • 檢出setInterval()以調用剛纔重複執行的功能
  • 最後一步:確保在錯誤情況下停止間隔(或提供開/關按鈕對於用戶來說,即使),因此服務器沒有不必要
+1

教一個人編碼... – SeanJA 2010-04-23 07:15:28

+0

最簡單的方法是使用setInterval()定期進行ajax回調。 – 2010-04-23 07:22:29

0

敲定有一個叫Comet技術,其中,由您的客戶端腳本將實例,從而保持打開很長一段時間的HTTP請求。然後,服務器可以在數據發生時將數據推送到響應中。這是一種提供push notification的技術。

維基百科鏈接有關於真實世界實現的更多信息。

0

除了使用AJAX調用輪詢服務器,您還可以使用推送技術(COMET)。 這樣,只要服務器完成工作,您就可以將結果推送到客戶端。 有很多可用的框架,如:

  1. JQuery plugin
  2. Cometd
  3. Atmosphere(如果你對JAVA)