Уничтожить предыдущий 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);
}
Ответы
Ответ 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);
}