0

我有以下 jQuery 代码:

    <script>
        $(document).ready(function() {
             setInterval(function() {
                $.get('async', function(data) {
                    $('#datum').text(data);          
                } );     
             }, 1000); // 1000 milliseconds = 1 second.

        });  
    </script>

在这种情况下,我使用以下 html 返回来自名为 async 的 servlet 的 String 结果:

字符串要么包含单词 running,要么包含 completed。如果数据变量包含“已完成”,我想停止上面的轮询。我已经尝试了以下代码片段,但我对放置它的确切位置感到困惑,或者它是否正确:

    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);} 
}

我进行了多次尝试,所有这些都破坏了功能。在不尝试停止轮询的情况下,上述方法可以很好地不断轮询并返回“正在运行”状态,除非当它达到“已完成”时,它也会继续轮询。

4

2 回答 2

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>
于 2013-08-19T18:50:06.027 回答
0

setInterval函数返回区间的 ID。如果要停止轮询,则需要清除具有该 ID 的时间间隔。您的代码段查看数据是否等于“已完成”,而不是是否包含“已完成”。使用indexOf函数而不是===. 片段应该是您知道数据值并想要解析它的地方。

于 2013-08-19T18:53:50.623 回答