2013-08-19 57 views
0

我有以下jQuery代碼:jQuery的條件爲停止的setInterval輪詢

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

     }); 
    </script> 

在這種情況下,我從一個稱爲異步使用以下HTML的servlet呈現回字符串結果該字符串包含正在運行的字詞或已完成。如果數據變量包含「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);} 
} 

我做了多次嘗試,所有的這打破了功能。在不嘗試停止輪詢的情況下,上述工作完全正常,可以持續輪詢並返回狀態「正在運行」,除非它達到「已完成」狀態,否則它繼續輪詢。

回答

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> 
0

setInterval函數返回間隔的ID。如果您想停止輪詢,則需要使用該ID清除間隔。您的代碼段會查看數據是否等於「已完成」,而不是是否包含「已完成」。使用indexOf函數代替===。這段代碼應該是你知道數據的價值並且想要解析它的地方。