单击鼠标时的传单加载数据和编辑要素属性

时间:2013-07-10 02:14:31

标签: javascript jquery ajax leaflet

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

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图层吗? (=&gt;因此我可以在ajax调用中发送功能ID,只需将其与响应一起返回)

2 个答案:

答案 0 :(得分: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());
}

答案 1 :(得分:0)

您在点击和成功功能上使用相同的事件名称'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',
         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'属性 希望这会有所帮助。