我有以下jQuery代码:
<script>
$(document).ready(function() {
setInterval(function() {
$.get('async', function(data) {
$('#datum').text(data);
} );
}, 1000); // 1000 milliseconds = 1 second.
});
</script>
在这种情况下,我使用以下html从名为async的servlet返回String结果:
String包含单词running或completed。如果数据变量包含“已完成”,我想在上面停止轮询。我已经尝试了下面的代码snipplet,但我确切地想把它放在哪里,或者它是否正确:
if (data ==="completed") {
for (var i = 1; i < 99999; i++) {window.clearInterval(i);}
}
我也试过
if ( $('#datum').text(data) ==="completed" ) {
for (var i = 1; i < 99999; i++) {window.clearInterval(i);}
}
我做了多次尝试,所有这些尝试都破坏了功能。在不试图停止轮询的情况下,上述工作完全正常,可以不断轮询并返回状态“正在运行”,除非它达到“已完成”状态,它也会继续轮询。
答案 0 :(得分:1)
您需要存储setInterval
调用的返回值(这是间隔的ID),以便稍后清除间隔。例如:
<script>
$(document).ready(function() {
var intervalID = setInterval(function() {
$.get('async', function(data) {
$('#datum').text(data);
if(data === 'completed'){
clearInterval(intervalID);
}
} );
}, 1000); // 1000 milliseconds = 1 second.
});
</script>
答案 1 :(得分:0)
setInterval
函数返回间隔的ID。如果要停止轮询,则需要使用该ID清除间隔。您的代码段会查看数据是否等于“已完成”,而不是它是否包含“已完成”。使用indexOf
功能代替===
。代码段应该是您知道数据值的地方,并且想要解析它。