Показать сообщение отдельно
  #5 (permalink)  
Старый 11.10.2013, 11:46
Аватар для mi.rafaylik
Кандидат Javascript-наук
Отправить личное сообщение для mi.rafaylik Посмотреть профиль Найти все сообщения от mi.rafaylik
 
Регистрация: 07.12.2012
Сообщений: 113

vladimir7517, вариант с флагом может выглядеть так:
var workerFlag; // пустой флаг в поле видимости обеих функций
function worker(параметры){ // часть функции, отвечающая за повторный запрос
	workerFlag = 1; // активируем флаг
	$.ajax({
		complete: function() {
			if (workerFlag == 1){ // проверяем флаг
				setTimeout(worker, 3000);
			}
		}
	});
}
$('.openMap').click(function(){ // какое-либо действие/событие, возможно открытие новой карты
	workerFlag = 0; // обнуляем флаг, следующий setTimeout уже не запустит функцию worker
	// дождаться завершения последнего таймаута - не лучшее решение
	// дальнейшие действия - видимо запускаем функцию worker с новыми параметрами
});

Но здесь сталкиваемся с трудностью - если функция вызывает сама себя, setTimeout даёт задержку перед запуском новой функции в случае остановки текущей (чтоб проверить флаг).
Лучше переосмыслить подход. Например, использовать флаг только для остановки повторного запуска функции (возможно закрытие карты), а при каждом запуске функции проверять передаваемые ей параметры. Если нажали открыть другую (следующую) карту, передавать функции worker новые параметры (id нового запроса, какую карту открывать, где открыть). А в setTimeout проверять id запроса.
Почитайте как передать параметры функции, и ещё про deffered.

Последний раз редактировалось mi.rafaylik, 11.10.2013 в 13:31.
Ответить с цитированием