0

DataTableWeb サービスにアクセスして、セルの値をオフラインからオンライン (およびその逆) に更新しようとしています。

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 ミリ秒ごとではなく 1 回しか実行されないことです。ここで何が欠けていますか?

4

1 に答える 1

2

同じ URL をクエリし続けるため、ブラウザーが要求されたデータをキャッシュから取得し続けることを除いて、おそらく意図したとおりに機能します。

これを回避するには、クエリの時刻または乱数を使用してクエリ文字列にダミー変数を追加するという一般的な方法で、URL を変更し、ブラウザにサーバーから再度取得するように強制します。

したがって、基本的にはvar now = new Date();、関数 updateStuffOnTheTable で宣言してから、次のように URL をマウントできます。

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

AJAX POST リクエストはキャッシュされないため、POST リクエストを使用してこれを解決することもできます。

于 2013-03-12T06:08:33.763 に答える