通过Google地图{J 44}的JSON结果循环问题

时间:2015-11-20 18:07:43

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

我正在尝试使用JSON Feed在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存在问题。所有的点打开相同的InfoWindow,使用相同的文本....

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

当使用for ...时,您也可以获得原型对象,仔细检查您是否正在使用对象本身的属性。为此,请使用以下命令包装循环内容:

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

此外,每次循环运行时,您都会重新声明变量,它更简洁,并且可以更好地将声明移到外面。

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

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

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