我最近一直在摆弄Leaflet和不同的地图。我目前正在尝试使用onClick事件创建的标记来显示从API提供的JSON查询中解析的当前地址。
我正在成功解析JSON查询中的地址(控制台登录onMapClick(e)的getAddress)。但是我想要做的是从回调(?)函数返回这个值,并将其作为标记的内容显示。
function getAddress(lat, lon, callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.digitransit.fi/geocoding/v1/reverse?point.lat=' + lat + '&point.lon=' + lon + '&size=1', true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (typeof callback == "function") {
callback.apply(xhr);
}
}
}
xhr.send();
}
function onMapClick(e) {
popup
.setLatLng(e.latlng)
.setContent("Address is " +
getAddress(e.latlng.lat, e.latlng.lng, function() {
var resp = JSON.parse(this.responseText);
console.log(resp.features[0].properties.label); //This gives the correct current address in console
return resp.features[0].properties.label; //This SHOULD return the correct address, verified with the console log, and replace the function call in the marker's content window, however the address appears always as undefined.
}))
.openOn(map);
}
答案 0 :(得分:0)
更改执行顺序,以便在实际从API异步返回时使用该值:
function onMapClick(e) {
getAddress(e.latlng.lat, e.latlng.lng, function() {
var resp = JSON.parse(this.responseText);
popup
.setLatLng(e.latlng)
.setContent("Address is " + resp.features[0].properties.label)
.openOn(map);
});
}