我有一个程序,使用的getJSON从服务器获取JSON和处理这些数据,并将其呈现给用户。 但是,服务器上的数据被经常更新一次。 我怎样才能得到新的JSON每隔5分钟,并显示给用户,并做一个后台线程? 我可以使用的setTimeout这个?
谢谢! 马特
我有一个程序,使用的getJSON从服务器获取JSON和处理这些数据,并将其呈现给用户。 但是,服务器上的数据被经常更新一次。 我怎样才能得到新的JSON每隔5分钟,并显示给用户,并做一个后台线程? 我可以使用的setTimeout这个?
谢谢! 马特
使用每5分钟触发的间隔是明显的(和大多数浏览器兼容的)的方法。
这不会创建一个单独的线程,但这样做的传统的模拟。 所有这一切实际发生的是异步事件排队,当你规定它应该运行是在尽可能接近该点的时间执行。 精确度没有保证,但是,因为它是在同一个线程上运行,因此它需要在JS引擎的执行“机会之窗”。
换句话说,JS引擎将尽最大努力在需要的时刻来执行你的代码,而只是因为它是自由地这样做。
如果你不介意旧的浏览器的支持,你可以使用一个网络工作者 ,这确实没有一个单独的线程运行。
网络工作者脚本
self.addEventListener('message', function(evt) {
var gateway = new XMLHttpRequest();
var intie = setInterval(function() {
gateway.open("GET",evt.data.load_url,true);
gateway.send();
gateway.onreadystatechange = function() {
if (gateway.readyState==4 && gateway.status==200)
self.postMessage(gateway.responseText);
}
}, 300000); //every 5 minutes
}, false);
(请注意我用的香草JS那里,没有jQuery的,因为我不知道的使用jQuery网络工作者中的任何方式,你可以导入脚本,但jQuery的参考window
,它在网络工作者错误,因为他们没有任何关系窗口或DOM)
主要JS脚本
var worker = new Worker('worker.js');
worker.addEventListener('message', function(evt) {
//the loaded JSON data is now held in evt.data
alert(evt.data);
}, false);
worker.postMessage({load_url: 'json.txt'});
是否有在呼唤一个新的工作,每5分钟,或像我一样,用一个工人,有它每隔5分钟行事的任何好处,我不知道。 也许不是很多它,因为,在这两种情况下,有事情的间隔。
是的,你可以拉与数据setTimeout
(或setInterval
,如果你希望它无休止地运行)。 我认为这是你更好的选择?