#JavaScript If оператор не работает для setInterval - PullRequest
0 голосов
/ 27 мая 2018

Вот мой код

$('.match-dates').on('afterChange', function () {

        var currentSelectionDate =  $('.match-dates .slick-current > div > div').attr('data-date');
        var liveStatus;

        if(currentSelectionDate == null){
            liveStatus = 1;
            $.get('/api/index.php?request=GetLiveMatchesSpecial', function ( data ) {
                $('.lives').html(data);
            });

        } else {
            liveStatus = 0;
            $.get('/api/index.php?request=GetFixturesSpecial&date=' + currentSelectionDate, function ( data ) {
                $('.lives').html(data);
            });
        }

        if(liveStatus === 1){
            console.log(liveStatus);

            setInterval(function () {
                $.get('/api/index.php?request=GetLiveMatchesSpecial', function ( data ) {
                    $('.lives').html(data);
                });
            }, 5000);
        } else {
            console.log(liveStatus);

            clearInterval();

        }

    });

Когда var liveStatus = 0, он по-прежнему загружает функцию setInterval.Как видите, я проверяю значения var liveStatus, и он работает хорошо.Почему я не могу выгрузить ранее загруженную функцию setInterval?

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Метод setInterval() многократно вызывает функцию или выполняет фрагмент кода с фиксированной временной задержкой между каждым вызовом.

Таким образом, каждые 5000 мс будет вызываться код, написанный setInterval.

Так что если событие $('.match-dates').on('afterChange', function () запускается один раз с liveStatus как 0, этого достаточно, ваша функция setInterval() будет вызываться каждые 5 секунд.

Возможно, вам следует попробовать вместо этого использовать setTimeout.

Метод setTimeout() устанавливает таймер, который выполняет функцию или указанный фрагмент кода один раз после истечения таймера.

setTimeout(function() {
  $.get('/api/index.php?request=GetLiveMatchesSpecial', function(data) 
  {
    $('.lives').html(data);
  });
}, 5000);
0 голосов
/ 27 мая 2018

Чтобы clearInterval заработал, вы должны передать ему результат предыдущего вызова setInterval, который хотите очистить.clearInterval() без параметров, переданных ему, ничего не сделает.Например:

let interval;
$('.match-dates').on('afterChange', function() {
  var currentSelectionDate = $('.match-dates .slick-current > div > div').attr('data-date');
  var liveStatus;
  if (currentSelectionDate == null) {
    liveStatus = 1;
    $.get('/api/index.php?request=GetLiveMatchesSpecial', function(data) {
      $('.lives').html(data);
    });
  } else {
    liveStatus = 0;
    $.get('/api/index.php?request=GetFixturesSpecial&date=' + currentSelectionDate, function(data) {
      $('.lives').html(data);
    });
  }
  if (liveStatus === 1) {
    console.log(liveStatus);
    interval = setInterval(function() {
      $.get('/api/index.php?request=GetLiveMatchesSpecial', function(data) {
        $('.lives').html(data);
      });
    }, 5000);
  } else {
    console.log(liveStatus);
    clearInterval(interval);
  }
});
...