LINUX.ORG.RU

Ajax и Leaflet (осторожно, быдлокод)

 , ,


0

1

Вот не понимаю я, хоть тресни.

С помощью leaflet нанес на карту маркеры, координаты для которых получил из базы данных:

 
        var markerLocation = new L.LatLng(tower1.latitude, tower1.longitude);
        marker[tower1.index] = new L.Marker(markerLocation);
        map.addLayer(marker[tower1.index]);

Теперь хочу прицепить к каждому маркеру попап, да так, чтобы информация в него подгружалась из другой таблицы этой базы:

 
        marker[tower1.index].bindPopup("");
        marker[tower1.index].click = function () {
                get_tower_data(tower1.index);
        };
 
function get_tower_data(tower_index) {

        $.ajax({
                url: 'get_tower_data.php',
                data: {my_index : tower_index},
                dataType: 'json',
                success: function (hash_table, tower_index) {
                                var text = ""
                                var num = process_tower_data(hash_table);
                                text = "Это опора " + num;
                                console.log(text);
                        },
                cache: false,
                ifModified: true
        });
}

В итоге по клику все равно выводится пустой попап. Судя то тому, что console.log не вызывается (смотрю Firebug'ом), клик не обрабатывается вообще. Что я делаю не так?

json невалидный.(невалидный для кривой либы джаваскрипта)

Покажи json от сервера

anonymous ()
Ответ на: комментарий от anonymous

Подозреваю, что дело не в этом. Сейчас вызвал явно функцию get_tower_data, получил:

{"phoneNumber":"89289659851","numTower":"14","numLine":"\u0412\u041b-110\u043a\u0412 \u04136-\u04135","index":"6","dateOfMeasurement":"2012-08-13 12:22:07","F0":"123","F1":"122","F2":"121","F3":"123","F4":"122","F5":"121","F6":"123","F7":"122","F8":"121","F9":"122","T_m":32.2} 
decadent ()
Ответ на: комментарий от decadent

Но я вызвал эту функцию явно, а хотелось бы, чтобы она вызывалась по клику на маркере.

decadent ()

Что есть marker[tower1.index] ? Уверен что у него есть аттрибут click, и что обработчик вешается именно так?

Kalashnikov ★★★ ()
Ответ на: комментарий от Kalashnikov

Что есть marker[tower1.index] ?

Это элемент массива маркеров с соответствующим номером.

Уверен что у него есть аттрибут click, и что обработчик вешается именно так?

А вот в этом не уверен. Сейчас интенсивно гуглю, но пока без особых успехов.

decadent ()
Ответ на: комментарий от Kalashnikov

Я имел в виду какого он типа?

Object же. Получен путем new L.Marker(markerLocation).

Кури доки

Ок. Покурил:

 
marker[tower1.index].on("click", onMarkerClick);

function onMarkerClick(e) {
...
}

Как можно узнать в функции onMarkerClick, клик по какому маркеру ее вызвал?

decadent ()
Ответ на: комментарий от Kalashnikov

Вывернулся следующим образом:

 
marker[tower1.index]._myId = tower1.index;

map.on('popupopen', function (e) {
        console.log(e.popup._source._myId);
});

Чует мое сердце, что это не оптимальный способ. Но пока вроде бы работает.

decadent ()

Leaflet+Ajax+mySQL

Здравствуйте! Тоже не могу справиться с аналогичной задачей. Маркеры добавляю как Вы, событие Click немного по другому

	for(var i=0; i<lo_la.length; i++)
	{
		tower1[i] = lo_la[i].split(':');
		
		var markerLocation = new L.LatLng(tower1[i][1], tower1[i][0]);
		marker[tower1[i][2]] = new L.Marker(markerLocation,{icon: greenIcon, id:tower1[i][2]});
		
		map.addLayer(marker[tower1[i][2]]);
		    
        marker[tower1[i][2]].on("click", onMarkerClick);
	}

Событие работает и индекс маркера отслеживается. Проверяю так:
	function onMarkerClick() {
		
		alert(this.options.id);
	}
Не могу разобраться как запросить по клику данные из базы и поместить результат в popup. Поделитесь, если у Вас есть решение этой задачки. Спасибо.

amayak ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.