2011-04-08 51 views
3

我想知道如何做的是在遠程服務器上執行web服務,以確定有多少消息可用於讀取和填充文本一個帶有消息計數的超鏈接。訣竅是我想從計時器中解僱(例如每5分鐘一次)。這就是我一直在與JQuery和定時器::更新web服務的超鏈接文本

$.ajax({type:'Get',url:'http://foobar.com/ws',success:function(messageCount) 
    { 
     $('a.message').text(messageCount + ' Messages'); 
    } 
}) 

但不可否認搞亂,我完全無言以對,當涉及到定時器在JavaScript/jQuery的。任何幫助將不勝感激。

謝謝!

回答

3

您需要使用setInterval()函數。這將以指定的時間間隔運行一個已定義的函數。試試這個:

$(function() { 
    setInterval("getDataFromWS()", 300000) // 300,000 miliseconds is 5 minutes 
}); 

function getDataFromWS() { 
    $.ajax({ 
     type:'Get', 
     url:'http://foobar.com/ws', 
     success:function(messageCount) { 
      $('a.message').text(messageCount + ' Messages'); 
     } 
    }) 
} 
+0

爲什麼放在$(function(){...});? – Uri 2013-03-23 21:24:05

+1

確保在執行任何代碼之前文檔已準備就緒。在這種情況下可能有點過分,但IMO總是很好的做法。 – 2013-03-25 11:06:00

3

如果你想定期做到這一點,你應該使用setInterval

//create the timer (and save the unique id returned 
//so we can stop it later if needed, using clearTimer()) 
//This will fire every 300,000 millisecs (= 5 mins) 
//and call the updateMessageCount function 
var msgCounTimer = setInterval(updateMessageCount, 300000); 

function updateMessageCount() { 
    $.ajax({ 
      type:'GET', 
      url:'http://foobar.com/ws', 
      success:function(messageCount) 
      { 
       $('a.message').text(messageCount + ' Messages'); 
      } 
     }); 
} 

但是,如果你想要做一次使用setTimeout - 你可以用setTimeout定期做到這一點,只是你需要撥打電話每次設置定時器。

的一個情況下,我能想到的,你可能想使用setTimeout代替setInterval是當你在(下面的示例所示updateMessageCount)呼籲暫停功能做的工作,需要較長的超時時間間隔會導致下一次超時(使用setInterval時)顯示爲瞬時的,因爲定時器將每隔n秒觸發一次,而不管前一個超時調用的函數是否仍在執行。相反,如果您希望確保在連續調用您的超時處理程序(而不是您的超時處理程序每​​n毫秒被調用)之間會有n毫秒,您應該使用setTimeout而不是每次完成沉重設置時處理。

注意 我看你使用的是絕對URL中的例子,所以我想我會指出這一點的情況下,你不熟悉它 - 注意其作出限制你的JavaScript的same-origin policy請求發送到的域以外的域。

0

你需要看看setTimeout函數在Javascript

e.g var t=setTimeout("yourfunction()",10000);