2012-07-02 51 views
1

我有一個程序,它使用getJSON從服務器獲取JSON並處理這些數據並將其呈現給用戶。但服務器上的數據每隔一段時間都會更新一次。我怎樣才能每5分鐘獲得一個新的JSON並將其顯示給用戶,並在後臺線程中執行?我可以使用setTimeout嗎?Daemon Thread in Javascript

謝謝! 馬特

+0

是的。 'setTimeout'(甚至是'setInterval')就是這樣做的。 – Matt

回答

4

使用每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分鐘使用一名工作人員並採取行動,我不確定。可能不是很多,無論是哪種情況,都有一段時間。

0

是的,你可以用setTimeout(或setInterval,如果你想要它無盡地運行)拉數據。 我認爲這是您更好的選擇...