我正在从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,只需将其与响应一起返回)
答案 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'属性 希望这会有所帮助。