0

私はほとんどそれを手に入れました。ほとんど。

データベースから情報ウィンドウにデータを ajax しようとして数日後.... 、すべてのマーカーが正しい情報ウィンドウを取得します...データベースの最後のエントリを除いて、常に未定義になります。

これがフィドルです。

1 つのエントリだけで undefined になるのはなぜですか? プログラムが最初にロードされたときは空のように見えますが、最初のサイクルの後、それはまだ定義されていません。

これは、Ajax のために fiddle とは少し異なるコードです。

どんな提案でも大歓迎です。私は数か月間コンピューターを使用しており、この情報ウィンドウを (ほぼ) 正しく表示するために、ajax やクロージャーなどについてかなりの数の情報を読みました。関数dropmarker(...ボックス)でそのパラメーター/変数「ボックス」を作成しなければならなかった理由は漠然としていますが、機能します。つまり、ほとんど機能します。を使用せずに を使用する場合はbox.namepos.lat ()すべて問題ありません。しかし、最終的なプロジェクトは Youtube へのリンクになるため、他の値が必要です。私はすべての価値をもたらすことができる必要があります。

var BERLIN = new google.maps.LatLng(-32.517683, -46.394393);
var map = null;
var marker = null;
var index = 0;
var infoWindow = [];
var MY_MAPTYPE_ID = 'custom_style';



function initialize() {

         var featureOpts = [ ]  // lots personal options deleted to shorten code
         var mapOptions = {} // lots personal options deleted to shorten code
        map = new google.maps.Map(document.getElementById('map-canvas'),
        mapOptions);


         var styledMapOptions = { name: 'Custom Style'
         };

        var customMapType = new google.maps.StyledMapType(featureOpts, styledMapOptions);

        map.mapTypes.set(MY_MAPTYPE_ID, customMapType);
        function dropMarker (map,box, pos ){                                          return new google.maps.Marker({
                                map: map,
                                position: pos,
                                draggable: false,
                                }); // return

            //end of function
        }


        function changeMarker() {   

            if (marker) {
                infoWindow.close();
                marker.setMap(null);

            }

            var pos = neighborhood[index];
            var box = infowindows[index];
            marker = dropMarker(map,box, pos );
            var contentString = ('lat:' + box.lat+ '<br />' + 'lng:' + box.lng  + '<br />' + 'link:' +  box.link + '<br />' +'name:' + box.name)
            infoWindow.setContent( contentString);


            setTimeout(function () {
                infoWindow.open(map, marker);
            }, 200);

            index = (index + 1) % neighborhood.length;

            setTimeout(function () {
                changeMarker();
            }, 3000);
    } 

            customMapType = new google.maps.StyledMapType(featureOpts, styledMapOptions); // this seems to be optional
            infoWindow = new google.maps.InfoWindow ()  

                $.ajax({
                    type : 'POST',
                    url : 'php/locationsJson.php',
                    dataType : 'json',

                    success: function( json ){
                            neighborhood=[];
                            infowindows =[];
                            $.each(json,function(i,item){
                                neighborhood.push(new google.maps.LatLng(this.lat,this.lng));
                                infowindows.push(infoWindow)
                                contentString = ({link:this.link,name:this.name,lat:this.lat,lng:this.lng})
                                infoWindow = new google.maps.InfoWindow (contentString)     
                                alert ( infowindows)                    
                         });    //$.each

             changeMarker();    
                    } // end of success
                });//end of ajax        
}  //end of initialized
4

1 に答える 1

1

infoWindow値を設定した後にプッシュする必要があります。ここに作業中のJSFiddleがあります

contentString = ({

    lat: this.lat,
    lng: this.lng,
    name: this.name,
});
infoWindow = new google.maps.InfoWindow(contentString)
});
infowindows.push(infoWindow);
于 2013-07-06T19:33:54.910 に答える