как остановить функцию?
господа имеется скриптик
который каждые 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, время: 23:07. |