2013-03-17 69 views
0

嗨,我想刷新页面中的文本,通知有关服务器端的计算状态,而他们正在完成。计算从获取请求开始,刷新只有在get没有完成时才会发生。我试图通过在setInterval中获取服务器上的文本文件的内容并在GET完成后关闭该设置时间间隔来完成此操作。我的问题是,当我看到发生了什么事情时,我只看到一个文本文件的请求,一开始就没有。我希望从我的代码中每隔200毫秒就会看到一个请求。 我附上了js代码,并提前感谢你。由onclick开始的函数是disps(name);在等待GET完成时的Javascript setInterval

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(''); 
} 
+0

请正确缩进你的代码。 – Bergi 2013-03-17 14:19:33

+1

在等待HTTP请求完成时执行HTTP请求是一个坏主意。 – Pointy 2013-03-17 14:19:33

+0

@积分是的,但给我一个选择。 – Evan 2013-03-17 14:26:01

回答

2
setInterval(instant(nn) 

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

这不是你想要做的。

相反,你想通过调用instant()功能:

function() { instant(nn); } 
+0

是的,就是这样,我的坏:) thnx。 – Evan 2013-03-17 14:26:41

0

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

既然你想传递参数的功能,和setInterval不会为你做的,你需要一个封闭 - 这是简单的事情 - 包装instant在一个匿名函数:

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