2011-01-11 2 views
1

자바 스크립트의 비동기 성격 및 Google지도에 문제가 있습니다. Google Maps V3 tilesloaded 수신기를 사용하여지도에 마커를 추가하고 있습니다.JavaScript 및 Google Maps v3 : tilesloaded() 이벤트의 결과를 캡처합니까?

이 마커를 어떻게 잡을 지 모르겠으므로 tilesloaded가 비동기 적으로 실행되기 때문에 나중에 해당 작업을 수행 할 수 있습니다. 그리고 나는 자바 스크립트 초보자입니다! 이 모든 마커를로드하기 전에 show_place가 반환되기 때문에,

function show_place() { 
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    var marker = addMarker(lat, lng); 
    markers.push(marker); 
    // When the map boundaries move, add new markers within the bounds. 
    google.maps.event.addListener(map, 'tilesloaded', function() { 
     var bounds = map.getBounds(); 
     $.getJSON("/markers_within_bounds/", { [variables] }, function(json){ 
     for (i=0;i<json.length;i++) { 
       var map_marker = addMarker(json[i].lat, json[i].lng); 
        markers.push(map_marker); //Try to add markers to the array. Fail. 
     } 
     }); 
    }); 
    return markers; 
} 
$(document).ready(function() { 
    var markers = show_place(lat, lng); 
    alert(markers.length); 
    // Do things with the markers... if there is more than 1. 
}); 

경고는 항상 1을 보여줍니다

여기에 코드입니다. 추가 된 추가 마커를 확보 할 수 없습니다.

어떻게해야합니까?

감사합니다.

답변

0

당신은 이미 변수 마커가있을 수 있습니다,하지만 당신은

$(document).ready(function ...) 

의 길이를 요청할 때 길이는 항상있을 것 하나 (1) 만 터집니다 후 마커, 내부 기능을 삽입하기 때문에 show_place()가 실행을 마친 동안 타일이 모두로드되었습니다. show_place()는 아무 것도 반환하지 않습니다. 그러나 사용자에게 데이터를 업로드했다는 사실을 알리고 싶다면 코드를 내부 "콜백"함수에 넣거나 콜백 함수 블록 내에서 선언 된 함수를 호출하십시오.

1

당신은 다음과 같은 것을 수행해야합니다

var marker = new google.maps.Marker({ 
    position: point, 
    title: 'mytitle' 
}); 
marker.setMap(myMap); 
markersArray.push(marker); 
0

1 내가 대신 함수에서 값을 반환에 공용 변수를 만들 수 있다고 생각합니다.
2 콘솔에 내부 문제가 있는지 확인하십시오. (구글이 이벤트를 여러 번 호출하기 때문에 피하기 위해 더 나은)
3 대신 tilesloaded 사용하면

var markerList = []; 
function (data){//AJAX CALLBACK FUNCTION 
    //EMPTY THE LIST & CLEAR THE MARKER FROM MAP 
    for (var i = 0; i < markerList.length; i++) { 
    markerList[i].setMap(); 
    }; 
    markerList.length = 0; 
    markerList[i] = new google.maps.Marker({ 
    map: map, 
    position: new google.maps.LatLng(data[i].geo_latitude, data[i].geo_longitude), 
    title: data[i].fn 
    }); 
}; 
유휴 또는 한 bounds_changed 사용할 수 있습니다
관련 문제