【问题标题】:Issue looping through JSON results for Google Map [duplicate]问题循环遍历Google Map的JSON结果[重复]
【发布时间】:2016-02-23 07:57:38
【问题描述】:

我正在尝试使用 JSON 提要在 Google 地图上加载点。我基于这里提供的代码:http://forums.asp.net/t/1826865.aspx?Google+Maps+populated+from+SQL

这是我添加分数的方式:

function plotpoints() {
    clearMarkers();
    var responseText = $.ajax(
    {
        type: "POST", 
        url: "mapdata.aspx?state=California&city=Los%20Angeles", 
        data: "",
        success: function (msg) {
            if (msg != "") {
                serverResponseObj = msg;
                if ((serverResponseObj) && (serverResponseObj.points)) {
                    for (i in serverResponseObj.points) {
                        var marker = new google.maps.Marker({ 
                            name: serverResponseObj.points[i].name,     
                            position: new google.maps.LatLng(serverResponseObj.points[i].lat, serverResponseObj.points[i].long), map: map });
                        var markerContent = "<span style=\"font-weight:bold;\">" + serverResponseObj.points[i].name + "</span>";
                        markerContent += "<br/>";
                        markerContent += serverResponseObj.points[i].MDesc + " member" + ((serverResponseObj.points[i].MDesc == 1) ? "" : "s");
                        markerContent += "<br/>";
                        markerContent += "<a href=\"League.aspx?id=" + serverResponseObj.points[i].id + "\">Go to League Page</a>";
                        var infoWindow = new google.maps.InfoWindow({ content: markerContent });
                    markersArray.push(marker);
                    marker.addListener('click', function () { 
                        infoWindow.open(marker.get('map'), marker) });
                    }
                }
            }
            addPolys();
        }
    });
}

标记已正确添加。但是,InfoWindow 存在问题。所有点都打开同一个信息窗口,带有相同的文本....

有什么想法吗?

【问题讨论】:

  • marker.addListener - 可以查看原件吗? google.maps.event.addListener
  • 底线是向marker 添加一个事件侦听器,而您应该将它添加到google.maps - 所以它们都得到相同的事件处理程序(最后一个)..跨度>
  • 使用函数闭包将信息窗口内容与每个重复项的标记相关联 - proof of concept fiddle
  • 感谢 geocodezip。做到了!

标签: javascript json google-maps for-loop google-maps-markers


【解决方案1】:

我看不出究竟是什么导致了您的问题,但可以稍微清理一下代码,这可能有助于解决问题。

当使用 for...in 时,您也可能会得到原型对象,请仔细检查您是否正在使用对象本身的属性。为此,请将循环的内容包装为:

if (serverResponseObj.points hasOwnProperty(i)) { 
  ...
}

此外,您每次循环运行时都重新声明变量,将声明移到外部会更简洁并产生更好的性能。

var marker, markerContent, infoWindow;
for (i in serverResponseObj.points) { ... }

将它们一直移动到功能块的顶部会更准确 描述它的实际执行方式,通常是推荐的。

我会进行这些更新,然后再看看它。
特别是关于hasOwnPropery()的那一点,问题可能会像修复后一样神秘地消失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-06
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 2019-02-18
    • 1970-01-01
    相关资源
    最近更新 更多