2013-03-12 115 views
0

我試圖通過訪問一個Web服務更新我的DataTable中的單元格的值從脫機到聯機(反之亦然)。遍歷錶行並執行每行setInterval似乎並不工作

var $myTable = $("#my-table").dataTable(); 
var $myTableRows = $myTable.fnGetNodes(); 

for(var i=0; i<$myTableRows.length; i++) { 
    var $currentRowCount = i; 
    var $interval = $($myTableRows[i]).find("td:eq(9)").html(); 
    var $timeout = $($myTableRows[i]).find("td:eq(10)").html(); 
    var $dataINeedToPass = $($myTableRows[i]).find("td span:eq(4)").html(); 
    setInterval(function() { updateStuffOnTheTable($interval, $timeout, $dataINeedToPass, i); }, 4000); 
} 

function updateStuffOnTheTable(interval, timeout, dataINeedToPass, row) { 
    var $stuff = "Offline"; 
    var ajaxCall = $.ajax({ 
      url : "https://localhost:8443/cxf/mywebservice/" + dataINeedToPass, 
      type : "GET", 
      dataType : 'text', 
      timeout: 2000 
     }).done(function(data) { 
      $stuff = "Online"; 
     }) 
     .fail(function(data) { 
      $stuff = "Offline"; 
     }) 
     .always(function(data) { 
      $myTable.fnUpdate($stuff, row, 2); 
     }) 
} 

問題是,AJAX請求只執行一次而不是每4000ms。我在這裏錯過了什麼?

回答

2

它可能以滿意的方式工作,除了瀏覽器將繼續從緩存獲取請求的數據,因爲您一直在查詢相同的URL。

要解決這個問題,它的常見做法是在查詢字符串中添加一個虛擬變量與查詢時間或隨機數,它將更改URL,迫使瀏覽器再次從服務器檢索它。

所以基本上你可以在你的函數updateStuffOnTheTable聲明var now = new Date();,然後裝入您的網址是這樣的:

"https://localhost:8443/cxf/mywebservice/" + dataINeedToPass + '?now=' + now.getTime() 

您也可以嘗試使用POST請求來解決這個問題,sinse AJAX POST請求不會被緩存。