0

DataTable我正在尝试通过访问 Web 服务将单元格的值从离线更新为在线(反之亦然) 。

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 请求只执行一次,而不是每 4000 毫秒。我在这里想念什么?

4

1 回答 1

2

它可能按预期工作,除了浏览器将继续从缓存中获取请求的数据,因为您一直在查询相同的 URL。

为了解决这个问题,通常的做法是在查询字符串中添加一个带有查询时间或随机数的虚拟变量,它会更改 URL,迫使浏览器再次从服务器检索它。

所以基本上你可以var now = new Date();在你的函数 updateStuffOnTheTable 上声明,然后像这样挂载你的 URL:

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

您也可以尝试通过使用 POST 请求来解决这个问题,因为 AJAX POST 请求不会被缓存。

于 2013-03-12T06:08:33.763 回答