как остановить функцию?
господа имеется скриптик
который каждые 5 секунд берет с сервера координаты и подставляет их в яндекс карту,координаты берутся по id заказа,при нажатии на заказ выплывает div с картой,но проблема в том что я не могу остановить повтор функции и в карту подставляеется 2 , 3 и тюд заказов и карта начинает тупо моргать,подскажите как остановить данный settimeout когда мне нужно запускать функцию по другому заказу?вот сообственно сам код
function view_map(order_id){
$('#yandex_map').slideToggle();
//clearTimeout(id);
YMaps.load();
(function worker() {
$.ajax({
url: 'now-order-taxi-info.php',
data: 'order_id='+order_id,
type: 'GET',
success: function(xml){
jQuery(xml).find('data').each(
function()
{
var driver_timecount = jQuery(this).find('DRIVER_TIMECOUNT').text(),
car_mark = jQuery(this).find('CAR_MARK').text(),
car_color = jQuery(this).find('CAR_COLOR').text(),
gosnumber = jQuery(this).find('GOSNUMBER').text(),
is_prior = jQuery(this).find('IS_PRIOR').text(),
driver_phone = jQuery(this).find('DRIVER_PHONE').text(),
crew_coords = jQuery(this).find('CREW_COORDS').text(),
order_state = jQuery(this).find('ORDER_STATE').text();
var a = crew_coords.split(/\s*,\s*/);
var asd = [a[1].substr(0,7), a[0].substr(0,7)].join(', ');
//var coord = "["+asd+"]";
//alert(coord);
var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0],{behaviors:['default', 'scrollZoom']});
// Установка для карты ее центра и масштаба
map.setCenter(new YMaps.GeoPoint(a[0].substr(0,7),a[1].substr(0,7)), 18);
// Создает метку, значок которой не скрывается при открытии балуна
var placemark = new YMaps.Placemark(new YMaps.GeoPoint(a[0].substr(0,7),a[1].substr(0,7)), {draggable: 0, style: "default#carIcon"});
// Добавляет метку на карту
map.addOverlay(placemark);
});
},
complete: function() {
setTimeout(worker, 3000);
}
});
})();
|
Цитата:
Цитата:
какой-то флаг == угу запускаем таймер -- не угу фиг таймер |
Цитата:
|
Цитата:
Цитата:
|
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. |
http://i59.fastpic.ru/big/2013/1011/...1ebb18fae1.png
и когда я нажимаю еще на другие кнопки открытия карты скрипт продлжает первый аякс запрос и к нему добавляется еще второй,тоесть функция дублируется и карта соответсвенно перескакивает от одной точки к другой ,как быть то? |
ничего не помогло,какой то бешеный скрипт:-E )))
|
Цитата:
|
все заработало помог clearTimeout в нужном месте
и пришлось добавить кнопочку закрыть карту |
Цитата:
|
| Часовой пояс GMT +3, время: 06:42. |