Вот мой код, который будет извлекать данные из mysql и отображать маркеры на карте. Но я не могу отобразить информационные окна, когда я нажимаю на маркер. Спасибо за любую помощь.

Ссылка на информационные окна находится в самом низу страницы рядом с концом кода после ссылки ajax.

Благодарность

        if (markersArray) {
        for (i in markersArray) {
        markersArray[i].setMap(null);
        }
        markersArray.length = 0;
       }


function LoadMarkers(encodedString)
{
        var bounds = new google.maps.LatLngBounds();
        var stringArray = [];
        stringArray = encodedString.split("****");

        var x;
        for (x = 0; x < stringArray.length; x = x + 1)
        {
            var addressDetails = [];
            var marker;
            addressDetails = stringArray[x].split("&&&");
            var lat = new google.maps.LatLng(addressDetails[1], addressDetails[2]);
            var image = new google.maps.MarkerImage(addressDetails[3]);

            var marker = new google.maps.Marker({
                map: map,
                icon: image,
                position: lat,
                content: addressDetails[0]
            });

            markersArray.push(marker);
            google.maps.event.addListener( marker, 'click', function () {
            closeInfos();
            var info = new google.maps.InfoWindow({content: this.content});
            info.open(map,this);
            infos[0]=info;
            });

           bounds.extend(lat);

            if (markersArray) {
            for (i in markersArray) {
            markersArray[i].setMap(map);
                }
             }

        }
        map.fitBounds(bounds);
    }

        var geocoder;
        var map;
        var markersArray = [];
        var infos = [];


        geocoder = new google.maps.Geocoder();
        var myOptions = {



              mapTypeId: google.maps.MapTypeId.ROADMAP
            }
          var map = null;//new google.maps.Map(document.getElementById("map_canvas"), myOptions);

       jQuery(document).ready( function($){




        map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);


        LoadMarkers(document.getElementById("encodedString").value); 
                setInterval(function () {
                    jQuery.ajax({
                        url:'ajaxload.php',
                        type: "POST",
                        data: {'refreshed':true},
                        success: function(data)
                            {

                                LoadMarkers(data);
                            }
                    });

        }, 10000);

        //Manages the info windows
          function closeInfos(){
          if(infos.length > 0){
          infos[0].set("marker",null);
          infos[0].close();
          infos.length = 0;
       }
        }

       });
0
Nate 20 Сен 2013 в 21:41

1 ответ

Лучший ответ

Функция LoadMarkers определена в глобальной области видимости, но функция closeInfos определяется локально внутри обратного вызова $.ready.
Из-за этого вызов closeInfos() внутри click - обработчика маркера завершается неудачно и останавливает дальнейшее выполнение click - обработчика.

Вы должны сделать closeInfos доступным для всех:

window.closeInfos=function(){
          if(infos.length > 0){
          infos[0].set("marker",null);
          infos[0].close();
          infos.length = 0;
       }
}
0
Dr.Molle 21 Сен 2013 в 03:48