0

我需要创建一些标记弹出窗口,在地图上显示来自不同 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
      }
4

1 回答 1

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>
于 2013-06-28T23:57:13.257 回答