2012-07-22 30 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请求。如果您正在进行轮询,则可能会更好地将最新更新时间包含在请求中,以便服务器可以过滤比此时更早的任何事件。这样,您就不必为每个客户端的每个事件保存一个额外的标志。