用于停止setInterval轮询的jQuery条件

时间:2013-08-19 18:45:24

标签: jquery ajax function asynchronous setinterval

我有以下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);} 
}

我做了多次尝试,所有这些尝试都破坏了功能。在不试图停止轮询的情况下,上述工作完全正常,可以不断轮询并返回状态“正在运行”,除非它达到“已完成”状态,它也会继续轮询。

2 个答案:

答案 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功能代替===。代码段应该是您知道数据值的地方,并且想要解析它。