私はほとんどそれを手に入れました。ほとんど。
データベースから情報ウィンドウにデータを ajax しようとして数日後.... 、すべてのマーカーが正しい情報ウィンドウを取得します...データベースの最後のエントリを除いて、常に未定義になります。
これがフィドルです。
1 つのエントリだけで undefined になるのはなぜですか? プログラムが最初にロードされたときは空のように見えますが、最初のサイクルの後、それはまだ定義されていません。
これは、Ajax のために fiddle とは少し異なるコードです。
どんな提案でも大歓迎です。私は数か月間コンピューターを使用しており、この情報ウィンドウを (ほぼ) 正しく表示するために、ajax やクロージャーなどについてかなりの数の情報を読みました。関数dropmarker(...ボックス)でそのパラメーター/変数「ボックス」を作成しなければならなかった理由は漠然としていますが、機能します。つまり、ほとんど機能します。を使用せずに を使用する場合はbox.name
、pos.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