2013-03-14 39 views
0

我一直在使用jquery/ajax請求。我已經成功地獲得了一個從數據庫中檢索數據的ajax請求,問題是,我不斷地服務於window.setInterval()每x秒鐘刷新一次這個函數。使用Ajax動態地從數據庫獲取數據而無需刷新間隔

我該如何改變這個以保持ajax請求的活躍,因此它更新了html內容,而不必向我的ajax腳本提供多個請求。

我的代碼如下:

window.setInterval(function() 
{ 
    $(function() 
    { 
    $.ajax({          
     url: 'Ajax.php'+SearchTerm, dataType: 'json', success: function(rows)   
     { 
     $('#NumberOfVotes').empty(); 

      for (var i in rows) 
      { 
       var row = rows[i];   
       var QuestionID = row[0]; 
       var Votes = row[1]; 
       $('#NumberOfVotes') 
       .append(Votes); 
      } 
     } 
    });  
    }); 
}, 500); 
+0

setInterval是正確的方法來做到這一點。如果你想要一個異步服務器,你應該嘗試[node.js](http://nodejs.org)。 – soyuka 2013-03-14 14:37:25

回答

2

很多這取決於你的服務器如何能夠更新它的內容動態。也就是說,你正在尋找的是websockets。 Websockets旨在取代長輪詢範式。

編輯:由於您主要使用php爲您的服務器技術,看看棘輪。我聽說過它http://socketo.me/

下面是使用的WebSockets與HTML的優秀文章好東西 http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/

.NET在SignalR很大的套接字庫 http://signalr.net/

有PHP無數關於那裏的插座的文檔 http://php.net/manual/en/book.sockets.php

+0

SignalR的一個好處是,它回退到長時間輪詢和類似技術,適用於缺乏對網絡套接字本地支持的舊版瀏覽器。 – 2013-03-14 14:40:21

+0

@ChristoferEliasson是的,除其他外。 SignalR庫非常具有革命性,Scott Hansleman和公司現在已經將它作爲.NET標準網絡庫的一部分。它的功能非常強大 – 2013-03-14 14:41:25

+0

應該明確指出我主要使用PHP – user2146021 2013-03-14 14:42:54

0

看看使用網絡套接字 - 你可以發送消息,客戶端任何時候他們需要去尋找新的d ata - 這樣你就不會發出不必要的請求。嘗試檢查出pubnub - 服務很便宜,可以處理你需要的一切。

0

你需要一些服務器端,使請求保持活動狀態,直到它返回一些東西。這通常稱爲「彗星」,「長輪詢」或「推」。

其原理是:

  1. 您通過AJAX發送請求的客戶端
  2. 你的服務器接收請求,並且不返回響應了。它睡覺/等待,直到它有東西要返回
  3. 數據庫中的新條目!您的服務器現在有一些東西要返回:它會爲等待請求返回一些JSON數據
  4. 您會收到響應服務器端,顯示您必須顯示的內容,然後返回到步驟1發送另一個請求。

現在,實現服務器端將取決於您使用的語言/框架。


編輯:

使用PHP的一些例子:

Comet and PHP

Simple Comet Implementation Using PHP and jQuery

+0

只是沼澤標準的PHP,沒有框架 – user2146021 2013-03-14 14:43:26

+0

我編輯我的答案,添加PHP Comet實現的例子。希望這可以幫助 :) – 2013-03-14 15:10:22

相關問題