2013-02-25 2 views
1

Я пытаюсь создать функцию ajax, в которой я использую форму для передачи значения bbox скрипту PHP, который затем использует параметры bbox для вывода FeatureCollection вернуться к обратному вызову ajax.Функция Ajax для сбора geoJSON FeatureCollection и последующего вывода всплывающих окон на слой карты листка

Из этого я использую JSON.parse(), а затем пытаюсь отобразить часть описания каждой функции как всплывающее окно над соответствующей точкой.

Я потратил бесчисленные часы, пытаясь выяснить, что происходит в моем коде, но я просто не могу понять, как это работает.

Вот мой HTML для формы:

<select name="bbox" id="bbox" onchange="ajaxrequest()"> 
    <option name="Select" value="Select">Please Select</option> 
    <option name="Hampshire" value="-1.40,50,-1.39,51&format=geojson">Hampshire</option> 
</select> 

Вот моя функция AJAX:

function ajaxrequest() 
{ 
    var bbox = document.getElementById("bbox").value; 
    //alert(bbox); 
    var request = new Ajax().sendRequest 
     ('points.php', 
      { method: 'GET', 
       parameters: 'bbox=' + bbox, 
       callback: resultsReturned } 
     ); 
} 

А вот AJAX обратного вызова, который содержит коллекцию особенность GeoJSON в тексте ответа:

function resultsReturned (xmlHTTP) 
{ 
    //alert(xmlHTTP.responseText); 
    var geojson = JSON.parse(xmlHTTP.responseText); 

    for(var i=0; i<geojson.features.length; i++) 
    { 
     var layer = new L.geojson(); 
     layer.addData(geojson.features[i]); 
    } 
} 

Был бы очень признателен, если бы кто-то мог наполнить меня тем, как закончить потому что это убивает меня.

Заранее спасибо.

+0

Что происходит, когда вы запускаете код? Получаете ли вы правильный ответ? Можете ли вы показать нам значение 'xmlHTTP.responseText'? – flup

+0

Конечно, я покажу вам сокращенную версию. {"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "codes": ["- 1.4266", "50.9168" ]}, «свойства»: {«id»: «15», «name»: «Sanjha Restaurant», «страна»: «Англия», «регион»: «Хэмпшир», «описание»: «Описание»}} , { "типа": "Особенность", "геометрия": { "тип": "Точка", "координата": [ "- 1,34532", "50,9303"]}, "свойство": { "ID": "16 »,« имя »:« Мастер-строитель »,« страна »:« Англия »,« регион »:« Хэмпшир »,« описание »:« Описание »}}]} –

+0

Как вы можете видеть в JS, у меня есть оповещения тестирование значения до и после вызова AJAX просто для того, чтобы убедиться. –

ответ

1

Я думаю, что вы ищете это то:

function resultsReturned (xmlHTTP) 
{ 
    var features = JSON.parse(xmlHTTP.responseText); 
    L.geoJson(features).addTo(map); 
} 

(см http://leafletjs.com/examples/geojson.html)

Если вы хотите связать всплывающее окно для каждой функции:

function resultsReturned (xmlHTTP) 
{ 
    var features = JSON.parse(xmlHTTP.responseText); 
    L.geoJson(features, 
     { onEachFeature: 
       function(feature,layer) { 
        layer.bindPopup(feature.properties.description); 
       } 
     }).addTo(map); 
} 
+0

Спасибо за ответ. Из этого мне нужно поставить функцию oneachfeature, которая добавляет всплывающее окно с описанием каждой функции на карту, которая проходит прямо под ней? –

+1

вы можете предоставить опции для конструктора geoJson, да. Я добавил пример, как добавить параметр onEachFeature. – flup

+0

Подтвердил свой ответ, поскольку он кажется более кратким, чем я достиг этого. Спасибо за вашу помощь :) –

0

решенный Я добавил этот код к моей функции init. Обратите внимание на «нуль», так как это необходимо, чтобы обратный вызов AJAX мог заполнить его.

layer = new L.GeoJSON(null, 
    { onEachFeature: function(feature,layer) 
     { 
      layer.bindPopup(feature.properties.description); 
     } 
    }).addTo(map); 

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

function resultsReturned (xmlHTTP) 
{ 
    //alert(xmlHTTP.responseText); 
    var features = JSON.parse(xmlHTTP.responseText); 

    for(var i=0; i<features.features.length; i++) 
    { 
     layer.addData(features.features[i]); 
    } 

} 

Спасибо за помощь @flup помог мне понять то, как кодирование работает

+0

Или вы можете просто предоставить весь набор функций конструктору. – flup