2012-07-22 50 views
2

我有一個Web服務,在這裏我獲取數據並將其填充到我的客戶端。到目前爲止,我有一個按鈕,當使用ajax get單擊時,將從Web服務中獲取數據。在我的網絡服務上,我有一個維護點,可以添加,編輯或刪除數據。我想要做的是每次添加,編輯或刪除數據時,讓我的客戶端自動從Web服務獲取數據,以便向客戶端顯示準確的數據。關於Javascript/Jquery的監聽器

這是我在想什麼。在我的web服務上,我將有一個json,它可以告訴真假數據是否已更新(將由客戶端提取)。因此,每次添加,編輯和刪除都會將其變爲true,並且每次客戶端獲取該數據時,它都將變爲false。

現在,我需要一個JavaScript/jQuery的偵聽器,將聽該json(真或假)的任何變化。我需要讓這個聽衆每秒都在運行?可能嗎?

謝謝。

編輯:

我已經重讀我的帖子,並將其打我,我只是隻有一個客戶想在我的腦海裏。每次在我的Web服務中添加,編輯和刪除都會將「更新」設置爲true,並且每次我收到數據請求時,都會將其設置爲false。但其他客戶呢?當他們發送請求時,它已經是錯誤的,所以他們不會更新它。有任何想法嗎?由於

+0

您可以做的唯一事情是間隔輪詢服務器 – 2012-07-22 03:13:20

+0

我建議您查看Socket.IO以獲得一個好的網絡套接字封裝。 – Brad 2012-07-22 03:14:54

回答

4

爲此,您可以使用兩個aproaches:

  1. 網絡插座;或
  2. setInterval函數。

以下是setInterval()的示例。

// just a control var... 
var gen = 1; 

// call the function repeatedly in 5 seconds of interval 
// this call returns an id that can be used to stop the calls 
var id = setInterval(function(){ 

    // function body... 

    alert("making an ajax request...(" + gen + ")"); // here you call your webservice 
    gen++; 

    // just want to stop it, but you wont need this. 
    if (gen == 10) { 
     clearInterval(id); 
    } 

}, 5000); // 5000 miliseconds == 5 seconds 

一些鏈接:

+0

當我們像這樣無限期地使用setInterval時,它會耗盡更多資源(CPU或帶寬,還是有關的任何東西)?或者它與使用websockets相同? – 2014-04-07 05:52:26

0

你有兩個HTTP選項:輪詢服務器,或使用comet請求。如果您正在進行輪詢,則可能會更好地將最新更新時間包含在請求中,以便服務器可以過濾比此時更早的任何事件。這樣,您就不必爲每個客戶端的每個事件保存一個額外的標誌。