等待GET完成时的Javascript setInterval

时间:2013-03-17 14:15:55

标签: javascript jquery setinterval

您好我正在尝试刷新页面中的文本,该文本通知服务器端的计算状态,同时它们正在完成。计算以get请求开始,只有在get尚未完成时才进行刷新。我试图通过在setInterval中获取服务器上的文本文件的内容并在GET完成后关闭该设置间隔来实现此目的。我的问题是,当我看到正在发生的事情时,我只看到一个文本文件的请求,在开头,然后什么都没有。我期望从我的代码每隔200ms看到一个请求。 我正在附上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('');
}

2 个答案:

答案 0 :(得分:2)

setInterval(instant(nn)

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

这不是你想要做的。

相反,您希望传递一个调用instant()

的函数
function() { instant(nn); }

答案 1 :(得分:0)

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

由于你想将一个参数传递给函数,并且setInterval不会为你做这个,你需要一个闭包 - 这很简单 - 将instant包装在一个匿名函数中:

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