【问题标题】:Issue with multiple callbacks getJSON jquery多个回调getJSON jquery的问题
【发布时间】:2013-06-26 20:12:56
【问题描述】:

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

【问题讨论】:

  • 您要么必须从 marker 获取 name,要么将 name 添加到闭包中的变量中。
  • 对不起@Barmar 但是,你能解释一下吗?谢谢!!
  • 我想你会明白的,因为你已经为marker 做了这个。我已经发布了一个显示它的答案。
  • 效果很好!非常感谢@Barmar 的帮助,这是学校的项目。请让我问你,我必须在另外两个电话的弹出窗口中添加信息,我必须把它们放在哪里?我的老师帮我解决了这个问题,所以我不太明白代码,非常感谢您的帮助!
  • 很难确定没有看到你需要做的一切。我建议你研究它是如何工作的,并尝试自己解决它,这就是你学习和理解的方式。

标签: javascript ajax jquery mapping getjson


【解决方案1】:

您需要在闭包中捕获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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2011-08-22
    • 1970-01-01
    相关资源
    最近更新 更多