Подтвердить что ты не робот

Уничтожить предыдущий setInterval

Мне нужна функция для установки Ajax и таймера перезагрузки. Код ниже не уничтожает предыдущий таймер вызова функции, поэтому каждый раз, когда я вызываю его, я получаю еще один таймер. Как я могу уничтожить предыдущий таймер?

function initNowPlayingMeta(station) {
    $('#cancion').children().remove();
    $('#cancion').load('sonando.php?emisora=' + station);
    var prevNowPlaying = setInterval(function () {
        $('#cancion').load('sonando.php?emisora=' + station);
    }, 5000);
}
4b9b3361

Ответ 1

Вам нужно сохранить ссылку на таймер где-то вне локальной области (это, по сути, означает объявление с var вне функции). Затем очистите его с помощью clearInterval:

var prevNowPlaying = null;

function initNowPlayingMeta(station) {
    if(prevNowPlaying) {
        clearInterval(prevNowPlaying);
    }
    $('#cancion').children().remove();
    $('#cancion').load('sonando.php?emisora=' + station);
    prevNowPlaying = setInterval(function () {
        $('#cancion').load('sonando.php?emisora=' + station);
    }, 5000);
}

Ответ 2

clearInterval

clearInterval(prevNowPlaying);

вы также захотите сделать prevNowPlaying из предыдущих вызовов в области, если вы попытаетесь отменить

Ответ 3

Вам нужно явно очистить таймер.

var prevNowPlaying;
function initNowPlayingMeta(station) {
    $('#cancion').children().remove();
    $('#cancion').load('sonando.php?emisora=' + station);
    if (prevNowPlaying === undefined) clearInterval(prevNowPlaying);
    prevNowPlaying = setInterval(function () {
        $('#cancion').load('sonando.php?emisora=' + station);
    }, 5000);
}