0

こんにちは、サーバー側で計算が行われている間にその状態を知らせるページのテキストを更新しようとしています。計算は get 要求で開始され、更新は get が完了していないときにのみ発生する必要があります。サーバー上のテキスト ファイルの内容を setInterval で取得し、GET が完了した後にその設定間隔を閉じることで、これを実行しようとしています。私の問題は、何が起こっているのかを見ると、最初にテキストファイルのリクエストが1つしか表示されず、その後何も表示されないことです。コードから 200 ミリ秒ごとにリクエストが送信されることを期待しています。jsコードを添付し、事前に感謝します。onclick で起動する関数は disps(name); です。

function instant(nn) {
    $.get("./track.txt", function (data) {
        $('[name|="' + nn + '"]').html('');
        $('[name|="' + nn + '"]').html(data);
        /*$('[name|="'+ nn +'"]').first().html('');
        $('[name|="'+ nn +'"]').first().append('<img src="loading.gif">');*/
    });
}

function disps(nn) {
    aa = $('[name|=input_data]').val();
    /* $('[name|="'+ nn +'"]').html('');
    $('[name|="'+ nn +'"]').html('Analysed');
    $('[name|="'+ nn +'"]').first().html('');
    $('[name|="'+ nn +'"]').first().append('<img src="loading.gif">'); */
    var refreshId = setInterval(instant(nn), 200);
    $.get("./loop.php?query=" + aa, function (data) {
        /* $('[name|="'+ nn +'"]').find('img').remove().end(); */
        instant2(nn, refreshId);
        $('[name|="' + nn + '"]').first().append(data);
    });
}

function instant2(nn, refreshIntervalId) {
    clearInterval(refreshIntervalId);
    $('[name|="' + nn + '"]').html('');
    $('[name|="' + nn + '"]').first().html('');
}
4

2 に答える 2

2
setInterval(instant(nn)

この呼び出しは、他の関数呼び出しと同様にinstant(nn) すぐに実行されます。次に、他の関数呼び出しと同様
に、戻り値を に渡します。setInterval()

それはあなたがやろうとしていることではありません。

代わりに、次を呼び出す関数を渡しますinstant()

function() { instant(nn); }
于 2013-03-17T14:18:48.147 に答える
0

関数自体を渡す代わりに、関数をアクティブにして結果の値を setInterval に渡すという典型的な間違いです。

関数にパラメーターを渡したいのですが、setInterval はそれを行わないためinstant、匿名関数でラップするクロージャーが必要です。これは簡単に行うことができます。

setInteval(function() { instant(nn); }, 200);
于 2013-03-17T14:20:18.117 に答える