我有一個程序,它使用getJSON從服務器獲取JSON並處理這些數據並將其呈現給用戶。但服務器上的數據每隔一段時間都會更新一次。我怎樣才能每5分鐘獲得一個新的JSON並將其顯示給用戶,並在後臺線程中執行?我可以使用setTimeout嗎?Daemon Thread in Javascript
謝謝! 馬特
我有一個程序,它使用getJSON從服務器獲取JSON並處理這些數據並將其呈現給用戶。但服務器上的數據每隔一段時間都會更新一次。我怎樣才能每5分鐘獲得一個新的JSON並將其顯示給用戶,並在後臺線程中執行?我可以使用setTimeout嗎?Daemon Thread in Javascript
謝謝! 馬特
使用每5分鐘觸發的時間間隔是顯而易見的(並且大多數瀏覽器兼容)方法。
這不會創建一個單獨的線程,而是這樣做的傳統模擬。實際發生的所有事情是異步事件排隊,要在儘可能接近您規定應該運行的時間點執行。不過,精度並不能保證,因爲它在同一個線程上運行,所以它在JS引擎的執行過程中需要一個「機會之窗」。
換句話說,JS引擎將盡最大努力在需要的時候執行您的代碼,但僅限於它可以自由執行的程度。
如果你不介意舊的瀏覽器的支持,你可以使用一個web worker,這確實沒有一個單獨的線程運行。
網絡工作者腳本
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
,如果你想要它無盡地運行)拉數據。 我認爲這是您更好的選擇...
是的。 'setTimeout'(甚至是'setInterval')就是這樣做的。 – Matt