Элементы массива Javascript == "undefined" в функции Карт Google - PullRequest
1 голос
/ 18 апреля 2011

Здравствуйте, я зацикливаюсь на объекте JSON и создаю новый маркер карты для каждого элемента.После того, как маркер создан, я помещаю его в массив ( var markers ) для будущих манипуляций.Проблема в том, что когда я пытаюсь получить доступ к элементам массива (например: console.log (markers [3]) ), мне присваивается «неопределенное» значение.

Соответствующий код ниже:

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]);

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

0 голосов
/ 18 апреля 2011

попробуй:

initializeMap();
setTimeout(function(){
    console.log(markers[3]);
}, 10000);
0 голосов
/ 18 апреля 2011

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 голосов
/ 18 апреля 2011

Попробуйте

console.log(markers[0]);

, потому что, глядя на ваш код, в массиве markers есть только один элемент.

Если вы поместите в этот массив 4 элемента, то используйте markers[3] вы получите доступ к четвертому элементу.

...