2011-04-18 47 views
1

你好 我在循環一個JSON對象併爲每個項目創建一個新的地圖標記。創建標記後,我將其推送到一個數組(變量標記)以供將來操作。問題是,當我嘗試訪問數組項時(例如:console.log(markers [3])),我得到一個「未定義」的值。JavaScript數組項==谷歌地圖功能中的「未定義」

相關代碼如下:

var map; 
var markers = []; 
var activeFilters = []; 

function initializeMap() { 
    var myLatlng = new google.maps.LatLng(51.506873, -0.125141); 
    var myOptions = { 
     zoom: 14, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     disableDefaultUI: true 
    } 
    map = new google.maps.Map(document.getElementById("location_map"), myOptions); 


    $.getJSON('../js/hotspots.json', function(data) { 
     var hotspots = data.scenes[0].hotspots; 
     $.each(hotspots, function(i) { 

      var lat = hotspots[i].latitude; 
      var lon = hotspots[i].longitude; 
      var point = new google.maps.LatLng(lat,lon); 

      var cat = hotspots[i].hotspottype; 
      var weburl = hotspots[i].weburl; 

      var marker = addMarker(point,cat,weburl); 
     }); 

    }); 


} 

function addMarker(point, cat, weburl) { 
    var markerUrl = weburl; 
    var marker = new google.maps.Marker({ 
     position: point, 
     map: map 
    }); 

    marker.category = cat; 
    markers.push(marker); 
}; 

initializeMap(); 
console.log(markers[3]); 

任何幫助將不勝感激。

+0

好像你試圖訪問標記[3]之前它被推入到全局數組。在執行.getJSON回調函數之前。當然是 – kjy112 2011-04-18 13:18:09

+0

kjy112!我一直在盯着這一段時間,但從未注意到這一切都需要在回調中發生。謝謝! – fishmitten 2011-04-18 13:21:31

+0

是那個問題? – kjy112 2011-04-18 13:43:21

回答

0

GET JSON異步運行。試試這個:

$.getJSON('../js/hotspots.json', function(data) { 
    var hotspots = data.scenes[0].hotspots; 
    $.each(hotspots, function(i) { 
     var lat = hotspots[i].latitude; 
     var lon = hotspots[i].longitude; 
     var point = new google.maps.LatLng(lat,lon); 
     var cat = hotspots[i].hotspottype; 
     var weburl = hotspots[i].weburl; 
     var marker = addMarker(point,cat,weburl); 
    }); 
    console.log(markers); 
}); 
+0

謝謝 - 這就是問題所在(正如kjy112所述)。謝謝你們的幫助。 – fishmitten 2011-04-18 14:07:28

0

嘗試

console.log(markers[0]); 

,因爲看你的代碼,存在markers數組只有一個元素。

如果您將該數組放入4個元素,然後使用markers[3]您將訪問第四個元素。

0

嘗試:

initializeMap(); 
setTimeout(function(){ 
    console.log(markers[3]); 
}, 10000);