Javascript 多个回调getJSON jquery出现问题
我需要创建一些标记弹出窗口,在地图上显示来自不同ajax请求的信息。要进行第二次调用,我使用从第一次调用中获得的用户ID。第二次呼叫的信息显示良好,但所有弹出窗口显示的都是第一次呼叫的最后一个项目的相同名称,为什么会发生这种情况,有人能帮我吗?非常感谢Javascript 多个回调getJSON jquery出现问题,javascript,ajax,jquery,mapping,getjson,Javascript,Ajax,Jquery,Mapping,Getjson,我需要创建一些标记弹出窗口,在地图上显示来自不同ajax请求的信息。要进行第二次调用,我使用从第一次调用中获得的用户ID。第二次呼叫的信息显示良好,但所有弹出窗口显示的都是第一次呼叫的最后一个项目的相同名称,为什么会发生这种情况,有人能帮我吗?非常感谢 $.getJSON('url', function (data) { // first call for (var i = 0; i < data.length; i++) { var n
$.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
}
$.getJSON('url',函数(数据){//第一次调用
对于(var i=0;i“+info1+”“+info2+”,{maxWidth:'600'})//创建弹出窗口并将其添加到标记中
}
})(标记)
);
shops.addLayer(marker);//将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>
$(“#加载div”).show();
$.getJSON('https://api.site.com/data/“+userID+”,(函数(标记,名称){//使用userID的第二次调用
返回函数(数据2){
var info1=data2.response.tips.items[0]。文本;
var info2=data2.response.tips.items[1].text;
marker.bindpoop(“+name+”“+info1+”“+info2+”,{maxWidth:'600'})//创建弹出窗口并将其添加到标记中
$(“#加载div”).hide();
}
})(标记、名称)
加载。。。
你要么从标记中获取名称
,要么将名称
添加到闭包中的变量中。对不起@Barmar,但是,你能给我解释一下吗?谢谢!!我想你会理解的,因为你已经为标记
做了这件事。我已经发布了一个答案。它非常有效!非常感谢你的帮助elp@Barmar,这是学校的一个项目。请允许我问你,我必须将另外两个电话的信息添加到弹出窗口中,我必须将它们放在哪里?我的老师帮助我,所以我不太理解代码,非常感谢你的帮助!在看不到你需要做的所有事情的情况下很难确定。我建议你研究这是如何工作的,然后再试一次要自己解决这个问题,这就是你学习和理解的方式。