1

我正在从 GeoJSON 文件加载地图数据,并为每个多边形附加一个点击事件。单击时,脚本应从服务器获取数据并修改单击多边形的属性之一。IE:

function onClick(e) {
    var status = e.target.feature.properties.ACCESS;
    $.ajax({
        url: "http://127.0.0.1:8080/?&u=x&p="+e.target.feature.properties.ID_PARCELL,
        dataType: 'jsonp',
        type: 'GET',
        success: function(data) {
        status = data.status;
        e.target.feature.properties.ACCESS = data.status;
        e.target.bindPopup("Owner: <b>"+ data.status +"</b>").openPopup();
        },
        error: function(data){console.log(data)}
    });
    e.target.feature.properties.ACCESS = status;
    map.fitBounds(e.target.getBounds());
}

但是由于成功函数是一个回调(同步与否,这并不重要),我无法返回到原始事件源(即e),因此我可以修改它的一个属性。

我的问题是:加载此数据后如何返回事件源?有没有通用的Javascript方式?如果没有,有什么方法可以通过要素 ID 查询 GeoJSON 图层?(=> 因此,我可以在 ajax 调用中发送功能 ID,然后简单地将其与响应一起返回)

4

2 回答 2

5

解决方案是使用上下文条目将所需的变量发送e到匿名函数:

function onClick(e) {
    var status = e.target.feature.properties.ACCESS;
    $.ajax({
        url: "http://127.0.0.1:8080/?&u=x&p="+e.target.feature.properties.ID_PARCELL,
        dataType: 'jsonp',
        context: e,
        type: 'GET',
        success: function(data) {
        status = data.status;
        e.target.feature.properties.ACCESS = data.status;
        e.target.bindPopup("Owner: <b>"+ data.status +"</b>").openPopup();
        },
        error: function(data){console.log(data)}
    });
    e.target.feature.properties.ACCESS = status;
    map.fitBounds(e.target.getBounds());
}
于 2013-07-10T20:55:48.600 回答
0

您在 Click 和 success 函数上使用相同的事件名称“e” 。尝试改变其中之一。IE

function onClick(e) {
     var status = e.target.feature.properties.ACCESS;
     $.ajax({
         url: "http://127.0.0.1:8080/?&u=x&p="+e.target.feature.properties.ID_PARCELL,
         dataType: 'jsonp',
         type: 'GET',
         success: function(data, evt) {
             status = data.status;
             e.target.feature.properties.ACCESS = data.status;
             e.target.bindPopup("Owner: <b>"+ data.status +"</b>").openPopup();
        },
        error: function(data){console.log(data)}
     });
     e.target.feature.properties.ACCESS = status;
     map.fitBounds(e.target.getBounds());
 }

现在您可以在返回结果时更改初始事件“e”属性。
希望这可以帮助。

于 2013-07-10T05:50:11.970 回答