Javascript在等待GET完成时setInterval

Javascript setInterval while waiting for a GET to complete

本文关键字:setInterval 完成时 GET 在等待 Javascript      更新时间:2023-09-26

嗨,我正在尝试刷新页面中的文本,该页面通知服务器端计算的状态,而它们正在完成。计算从get请求开始,并且刷新必须仅在get未完成时发生。我试图通过在setInterval中获取服务器上的文本文件的内容并在GET完成后关闭该设置间隔来做到这一点。我的问题是,当我看看发生了什么,我只看到一个请求的文本文件,在开始,然后什么都没有。我希望在代码中每隔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('');
}
setInterval(instant(nn)

立即调用instant(nn) ,就像任何其他函数调用一样。
然后它将返回值传递给setInterval(),就像任何其他函数调用一样。

那不是你想要做的。

相反,你想传递一个调用instant()的函数:
function() { instant(nn); }

激活函数并将结果值传递给setinterval的典型错误,而不是传递函数本身。

因为你想传递一个参数给函数,而setInterval不会为你这样做,你需要一个闭包——这很容易做到——将instant封装在一个匿名函数中:

setInteval(function() { instant(nn); }, 200);