1

我正在尝试创建一个 ajax 函数,在该函数中我使用表单将 bbox 值传递给 PHP 脚本,然后使用 bbox 参数将 FeatureCollection 输出回 ajax 回调。

从这里我使用 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]);
    }
}

如果有人能告诉我如何完成这件事,我将不胜感激,因为它正在杀死我。

提前致谢。

4

2 回答 2

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);
}
于 2013-02-25T23:18:15.973 回答
0

解决 了我将此代码添加到我的初始化函数中。请注意“null”,因为这是必需的,以便 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 帮助我理解编码的工作方式:)

于 2013-02-26T16:44:25.643 回答