0

您好我正在尝试刷新页面中的文本,该文本通知服务器端计算的状态,同时它们正在完成。计算从获取请求开始,并且只有在获取尚未完成时才必须进行刷新。我试图通过在 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('');
}
4

2 回答 2

2
setInterval(instant(nn)

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

这不是你想要做的。

相反,您想传递一个调用的函数instant()

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

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

由于您想将参数传递给函数,而 setInterval 不会为您执行此操作,因此您需要一个闭包 - 这很简单 - 包装instant在一个匿名函数中:

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