我需要创建一些标记弹出窗口,以显示来自地图上不同ajax请求的信息。要进行第二次调用,我使用的是第一次调用时获得的用户ID。来自第二次调用的信息显示它很好,但所有弹出窗口都显示相同的名称,第一次调用的最后一项,为什么会发生这种情况,有人可以帮我吗?非常感谢提前!!!。
$.getJSON('url', function (data) { // first call
for (var i = 0; i < data.length; i++) {
var name= data[i].name;
var location= data[i].location;
var userID = data[i].userID;
var myIcon= data[i].icon;
var marker = new L.Marker(location, {title: name, icon: myIcon});// create the marker
$.getJSON('https://api.site.com/data/'+userID+'',(function(marker){ // second call using userID
return function(data2) {
var info1 = data2.response.tips.items[0].text;
var info2 = data2.response.tips.items[1].text;
marker.bindPopup("<div class='popup'>" + name +"</br>"+ info1 +"</br>"+ info2 + "</div>", {maxWidth: '600'}) // create the popup and add it to the marker
}
})(marker)
);
shops.addLayer(marker); // add marker to map layer
}
答案 0 :(得分:0)
您需要在闭包中捕获name
,就像对marker
一样。
$("#loadingDiv").show();
$.getJSON('https://api.site.com/data/'+userID+'',(function(marker, name){ // second call using userID
return function(data2) {
var info1 = data2.response.tips.items[0].text;
var info2 = data2.response.tips.items[1].text;
marker.bindPopup("<div class='popup'>" + name +"</br>"+ info1 +"</br>"+ info2 + "</div>", {maxWidth: '600'}) // create the popup and add it to the marker
$("#loadingDiv").hide();
}
})(marker, name)
<div id="#loadingDiv" style="display: none">Loading...</div>