setInterval() 有哪些选项?

3

我需要定时连续读取文件,代码如下:

setInterval(function(){
    $.getJSON("json/someFile.json", function(data){
        // Some code
    });
}, 5000);

我正在持续阅读这个文件,因为它在代码的其他部分得到更新。我希望避免使用 setInterval()。

有没有办法让我知道文件已经更新,并且只在更新时读取它。


3
setInterval() 不是 jQuery 的方法。 - Rayon
4
你可以使用WebSockets来代替,通过让服务器在文件更改时向客户端发送通知。 - Rory McCrossan
我还建议请使用WebSockets,一些有用的链接是:https://developer.mozilla.org/en-US/docs/Web/API/WebSocket - Rajesh Patel
您正在寻找服务器PUSH技术。 - A. Wolff
2个回答

2
我假设您说的是客户端代码。那么不,没有办法像在“常规”应用程序中拥有文件监视器一样“监视”json文件。您需要使用以下任一方法:
  • 像您现在所做的那样,基于时间间隔进行检查。但是,正如@ George在评论中建议的那样,如果您在特定情况下(例如成功时)使用 setTimeout 而不是失败,则可能会更好地重新启动Ajax请求; 使用当前方法,该函数可以在间隔上运行,但如果响应时间超过间隔时间,则会积累请求;
  • 使用Websockets(可能具有回退到类似长轮询之类的东西),也许需要另一个库以及此解决方案的服务器端部分;

抱歉,没有其他办法。

作为脚注,这与jQuery关系不大。首先, setInterval 不是jQuery而是常规的 window 函数,其次,“监视”文件的问题与您执行Ajax调用的方式无关(您使用jQuery,但也可以使用其他库)。


1
@George 不错。已将此加入第一条要点。如果我遗漏了细节,请随时提出修改意见。 - Jeroen

2

首先,setInterval是原生JavaScript方法,不是来自jQuery。其次,你所做的是轮询。这意味着你定期请求一些信息以保持其最新状态。另一种选择是使用WebSockets。Websockets是客户端和服务器之间的双向连接,可以推送和接收消息。这样,每当后台更新文件时,您可以向客户端发送一个socket消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接