2015-11-20 31 views
0

我正在嘗試使用JSON訂閱源在Google地圖上加載點。我已根據這一關這裏介紹的代碼:http://forums.asp.net/t/1826865.aspx?Google+Maps+populated+from+SQL通過Google地圖的JSON結果循環的問題

這裏是我如何添加點:

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,使用相同的文本....

任何想法?

+0

'marker.addListener' - 查看原文或許? 'google.maps.event.addListener' –

+0

當你應該將它添加到'google.maps'中時,你要向'marker'添加一個事件監聽器 - 因此它們都得到相同的事件處理器(最後一個) .. –

+0

使用函數閉包將infowindow內容與每個副本的標記相關聯 - [概念證明小提琴](http://jsfiddle.net/geocodezip/4xstxzez/2/) – geocodezip

回答

0

我看不到究竟是什麼導致你的問題,但代碼可以清理一下,這可能有助於解決問題。

使用for ... in時,您也可能會獲得原型對象,請仔細檢查您是否正在處理對象本身的屬性。要做到這一點,您的包裹循環的內容有:

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

你也重新聲明每次循環運行時間變量,它更簡潔,併產生更好的性能外移動的聲明。

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

移動它們一路給功能塊的頂部將更準確地描述 它實際上被執行,並且通常推薦的方式。

我會做這些更新,然後再看看它。
特別是有關hasOwnPropery()的問題,該問題可能會在解決該問題後以神祕方式消失。