Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.06.2015, 23:12
Новичок на форуме
Отправить личное сообщение для Balatsky Посмотреть профиль Найти все сообщения от Balatsky
 
Регистрация: 17.06.2015
Сообщений: 4

Проблема с таймером
Привет, комрады. У меня никогда не было проблем с JS, знаю его на уровне любителя, но тут внезапно столкнулся с проблемой, которую не могу решить второй день. Вообщем, каждые 3 секунды делается запрос к серверу, сервер отдает кол-во секунд до определенного события. Я пытаюсь сделать таймер, но вместо этого создается куча таймеров, которые мне совсем не нужны. Какое будет самое оптимальное решение для этого?

Последний раз редактировалось Balatsky, 18.06.2015 в 00:18.
Ответить с цитированием
  #2 (permalink)  
Старый 18.06.2015, 07:22
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 267

Первое, что на ум пришло:
var timer = setInterval(function() {
    var req = new XMLHttpRequest();
    /* Обрабатываем запрос, если интервал больше не нужен, то clearInterval(timer) */
}, 3000);
Ответить с цитированием
  #3 (permalink)  
Старый 18.06.2015, 12:47
Новичок на форуме
Отправить личное сообщение для Balatsky Посмотреть профиль Найти все сообщения от Balatsky
 
Регистрация: 17.06.2015
Сообщений: 4

Запрос делается и постоянно обновляется переменная countdown (данные для этой переменной отдает сервер, это кол-во секунд). Надо, чтобы таймер брал значение постоянно из этой переменной и декрементил ее каждую секунду, при этом не создавая кучу инстансов. При этом у меня должна быть возможность его остановить.
Ответить с цитированием
  #4 (permalink)  
Старый 18.06.2015, 13:48
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 267

Balatsky,
Не очень понятно, чего вы хотите сделать, предположил, что от сервера вы получаете данные в json, вот примерное решение.
var countdown;

var timer = setInterval(function() {
    var xhr = new XMLHttpRequest();
    
    var obj;

    xhr.open('GET', 'script.php', true);

    xhr.send();

    xhr.onreadystatechange = function() {
    if (xhr.readyState != 4) return;

    obj = JSON.parse(xhr.responseText);

    countdown = obj.countdown; // Получаем значение countdown от сервера

    };
}, 3000);

var countDecrement = setInterval(function() {
    countdown--; // Декрементим countdown
    if (countdown < 1) {
        clearInterval(countDecrement); // Останавливаем интервал, если countdown меньше 1
    }
}, 1000);
Ответить с цитированием
  #5 (permalink)  
Старый 18.06.2015, 15:38
Новичок на форуме
Отправить личное сообщение для Balatsky Посмотреть профиль Найти все сообщения от Balatsky
 
Регистрация: 17.06.2015
Сообщений: 4

Бывает так, что от сервера приходит 0, в это время таймер идти не должен.
// каждые 3 секунды, когда парсится ответ от сервера
if(data.is_started != false & data.is_closed == false) {
							if($countdown != 0 & timer == null)
								timer = setTimeout(countdown, 996);
						}
// отдельная функция
function countdown() {
					$countdown--;
					console.log($countdown);
					var minutes = ($countdown / 60).toFixed(0);
					var seconds = $countdown % 60;
					$('#timer').html(minutes + ':' + seconds);
					if($countdown == 0) {
						clearTimeout(timer);
						timer = null;
					} else {
						timer = setTimeout(countdown, 996);
					}
				}
Ответить с цитированием
  #6 (permalink)  
Старый 19.06.2015, 22:27
Новичок на форуме
Отправить личное сообщение для Balatsky Посмотреть профиль Найти все сообщения от Balatsky
 
Регистрация: 17.06.2015
Сообщений: 4

Вообщем, сделал бесконечный интервал. Всем спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с радио кнопками px379 Общие вопросы Javascript 8 29.07.2013 09:30
Проблема с обратным таймером UndeadLie jQuery 2 18.03.2013 10:21
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47