Клуб API Карт

Загружает json несколько раз

lobstarr
6 ноября 2012, 01:01

Здравствуйте, есть карта, которая тянет метки через json, кластеризует и выводит их.

Хочу сделать внешние ссылки, которые бы удаляли метки и загружали бы новые, с другого файла.

Делаю вызов функции с загрузкой по клику (.ymapsswitcher). Но проблема, если кликнуть несколько раз, то загружает меток больше, чем надо. Например, если в файле 10 меток и кликнуть 3 раза, то загрузит 30 меток. Как сделать, чтобы загружало только один раз?

 

 

 

<script type="text/javascript">

 

ymaps.ready(initmap);

 

function initmap () {

  var myMap = new ymaps.Map("ymapsmap", {

    center: [59.950416,30.32929],

        zoom: 12,

        behaviors: ['default', 'scrollZoom']

  },

  // Создаем кластеризатор

  cluster = new ymaps.Clusterer()

  );

  

  myMap.controls.add('zoomControl');

  

  placemarks = [];

  

  function addPlacemarks (url) {

  

  $.getJSON(url, function(json){

if (json.status == 'OK') {  

  for (i = 0; i < json.markers.length; i++) {

placemark = new ymaps.Placemark([json.markers[i].lon, json.markers[i].lat], {

  balloonContentHeader: json.markers[i].name,

  balloonContentBody: 'Добавлено: '+json.markers[i].address

});

placemarks[i] = placemark;

  }

  // Добавляем массив меток в кластер

  cluster.add(placemarks);

          // Добавляем кластер на карту.

          myMap.geoObjects.add(cluster);

}

else {

  alert('Произошла ошибка!');

}

  });

  

  }

  

  addPlacemarks('ЗДЕСЬ ССЫЛКА НА JSON');

 

          $(".ymapsswitcher").bind('click', function() {

    placemarks.length = 0;

    alert(placemarks.length);

    // Удаляем все  метки из кластера

        cluster.removeAll();

        // Удаляем кластер с карты

        myMap.geoObjects.remove(cluster);

        addPlacemarks('ЗДЕСЬ ССЫЛКА НА JSON #2');

  });

  

}

</script>

 

 

4 комментария
Подписаться на комментарии к посту

вообще хорошим тоном является disable кнопки до зовершении любой операции, не только в картах но и везде, ибо крупные порталы проводили исследовнаия и выясняется что многие юзеры кликают по всем кнопкам и ссылкам по два раза, так как их учили кликать по ярлыкам на десктопе

А как это сделать со ссылками? Я понимаю, что нужно заблокировать как-то после клика и восстановить после выполнения.

 var clicked= false;   

$.getJSON(url, function(json){

...

  clicked= false;  

}); 

$(".ymapsswitcher").bind('click', function() {

if(clicked)return false;

clicked= true; 

...

 

(B)спасибо