Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как удалить все таймеры на странице? (https://javascript.ru/forum/misc/57597-kak-udalit-vse-tajjmery-na-stranice.html)

VolodinAS 11.08.2015 13:18

Как удалить все таймеры на странице?
 
ajaxом подгружаю страницу, где есть таймер. Если подгрузить несколько раз - будет несколько таймеров, которые будут в свое время делать запрос и получится не 1 раз в 5 секунд, а несколько раз в секунду. Как можно удалить таймеры? Или может определить их "местоположение"?

javaQest 11.08.2015 13:48

таймер типично удаляется по id
tid=setInterval(fu, 100)
clearInterval(tid)

VolodinAS 11.08.2015 14:20

это до перезагрузки. Если после подгрузки ajax попытаться очистить - - пишет, что нет такой переменной, выдаст ошибку и не продолжит.

Deff 11.08.2015 15:02

VolodinAS,
Выносите определение переменной до подгружаемых блоков
Или создайте объект на window window.Myvar = {} , и к нему привязывайте глобальные передаваемые переменные
Вне подгружаемого:
Myvar.tid1 = false;Myvar.tid2 = false;

Внутри:
clearInterval(Myvar.tid1);
Myvar.tid1 = setInterval(fu, 100)

VolodinAS 18.08.2015 12:28

Хм... Большое спасибо, попробую пользоваться

VolodinAS 18.08.2015 14:35

Цитата:

Сообщение от Deff (Сообщение 383609)
VolodinAS,
Выносите определение переменной до подгружаемых блоков
Или создайте объект на window window.Myvar = {} , и к нему привязывайте глобальные передаваемые переменные
Вне подгружаемого:
Myvar.tid1 = false;Myvar.tid2 = false;

Внутри:
clearInterval(Myvar.tid1);
Myvar.tid1 = setInterval(fu, 100)

Итак, начну с того, что я собрал всевозможные таймеры на своих страницах, дал им имена, откорретировал, сделал так, чтобы у них был только 1 запуск даже после перезагрузки.
Создал отдельный js-файл, там прописал объект TIMERS и через TIMERS.имя_таймера прописал false.

Теперь основная история. У меня каждые 5 секунд идет запрос на файл, который отдает юзеру кол-во старых сообщений в чате и количество того, что он прочитал. Если есть разница - подгрузить недостающие. setInterval на эту вещь прописан.
В самом низу страницы прописал функцию, которая перебирала объект TIMERS и выводила через console.log() все переменные объекта TIMERS, не равные false.
Также, создал еще одну функцию, которая переходит в другой раздел. Там я прописал clearInterval для этой функции:
function startGame(par){
	if (par == 1){
		$('#dark').show(1000);
		$('#newgame').show(1000);
		$('#interface').hide(1000);
	} else {
		if (par == 2){
			var data = $('#startNewGame').serialize();
			$('#dark').hide(1000);
			$('#newgame').hide(1000);
			clearInterval(TIMERS.checkNewMessanges); // удалить таймер проверки новых сообщений
			TIMERS.bidSelector = false;
			TIMERS.gameSelector = false;
			TIMERS.checkNewMessanges = false;
			loadPage('startGame<?=$pvp?>',data);
		} else {
			if (par == 3){
				$('#dark').hide(1000);
				$('#newgame').hide(1000);
				$('#interface').show(1000);
			}
		}
	}
}


И вот, когда я перешел, я увидел в консоли это:
Код:

---
TIMERS.checkNewMessanges: 9611
TIMERS.logtimers: 8

, а во вкладке Network функция продолжала парсить сообщения. Вопрос - что я сделал не так?


Часовой пояс GMT +3, время: 20:19.