Остановить jquery setInterval, когда get () == 'Закончено'? - PullRequest
1 голос
/ 18 декабря 2010

Кто-нибудь знает, есть ли какой-нибудь способ остановить setInterval, если scan_status.php == 'Закончено'?

Каждые 3 секунды данные (html) берутся из файла scan_status.php.Я хочу прекратить обновление данных, если scan_status.php завершен.

Заранее спасибо!

Райан

 jQuery(function($){
setInterval(function(){
 $.get( 'dynamic/page_count.php?u=<?php echo $uid; ?>', function(newRowCount){
  $('#pagecounter').html( newRowCount );
 });
 $.get( 'dynamic/individual_count.php?u=<?php echo $uid; ?>', function(newIndRowCount){
  $('#individual_counter').html( newIndRowCount );
 });
 $.get( 'dynamic/total_word_count.php?u=<?php echo $uid; ?>', function(totalWordCount){
  $('#total_word_count').html( totalWordCount );
 });
 $.get( 'dynamic/scan_status.php?u=<?php echo $uid; ?>', function(scanStatus){
  $('#scan_status').html( scanStatus );
 });
 $.get( 'dynamic/download_status.php?u=<?php echo $uid; ?>', function(downloadStatus){
  $('#download_status').html( downloadStatus );
 });
},3000); // 5000ms == 5 seconds
});

Ответы [ 3 ]

1 голос
/ 18 декабря 2010

Сохранить ссылку на обработчик setInterval, сохранив возвращаемое значение из вызова.

var interval = setInterval(function(){...});

и когда вы хотите очистить его, используйте clearInterval( interval );

Итак, в вашем примере

jQuery(function($){
var interval = setInterval(function(){
 $.get( 'dynamic/page_count.php?u=<?php echo $uid; ?>', function(newRowCount){
  $('#pagecounter').html( newRowCount );
 });
 $.get( 'dynamic/individual_count.php?u=<?php echo $uid; ?>', function(newIndRowCount){
  $('#individual_counter').html( newIndRowCount );
 });
 $.get( 'dynamic/total_word_count.php?u=<?php echo $uid; ?>', function(totalWordCount){
  $('#total_word_count').html( totalWordCount );
 });
 $.get( 'dynamic/scan_status.php?u=<?php echo $uid; ?>', function(scanStatus){
  $('#scan_status').html( scanStatus );
  if (scanStatus == 'finished') 
     {clearInterval(interval);}
 });
 $.get( 'dynamic/download_status.php?u=<?php echo $uid; ?>', function(downloadStatus){
  $('#download_status').html( downloadStatus );
 });
},3000); // 5000ms == 5 seconds
});
0 голосов
/ 18 декабря 2010

Вы должны использовать clearInterval для идентификатора, который вы получаете, когда звоните setInterval. Как это:

var intervalId = setInterval(

При обратном вызове scan_status вы звоните

clearInterval(intervalId);
0 голосов
/ 18 декабря 2010

setInterval возвращает идентификатор, который можно передать на clearInterval, чтобы остановить повторные вызовы.

setInterval, кстати, не jQuery, а Ye Plain Olde Javascript.

...