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

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

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: "+ data.status +"").openPopup(); }, error: function(data){console.log(data)} }); e.target.feature.properties.ACCESS = status; map.fitBounds(e.target.getBounds()); } 

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

我的问题是:如何在加载此数据后返回事件源? 有没有通用的Javascript方式? 如果没有,有什么方法可以按functionID查询GeoJSON图层吗? (=>因此,我可以在ajax调用中发送functionID,只需将其与响应一起返回)

解决方案是使用上下文条目将所需的变量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: "+ data.status +"").openPopup(); }, error: function(data){console.log(data)} }); e.target.feature.properties.ACCESS = status; map.fitBounds(e.target.getBounds()); } 

您在Click和successfunction上使用相同的事件名称‘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: "+ data.status +"").openPopup(); }, error: function(data){console.log(data)} }); e.target.feature.properties.ACCESS = status; map.fitBounds(e.target.getBounds()); } 

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