a) 最初の本当のジョーク: ついに何年にもわたって Microsoft のものを購入したことが報われました.. Chrome を使用してデバッグしようとすると、私のマップにはマーカーが 1 つしか表示されませんでした。setTimeout の期間中は正しい緯度にあり、ほんの数秒間点滅し、同じ位置に戻りました。ある時点で、誤ってコードを Explorer に送信してしまいました... 出来上がり... コードはデータベースを反復処理しますが、各マーカーに対して setTimeout を使用しません。Explorer では、setTime out (例、5 秒) は、すべてのマーカーが正しい情報ウィンドウと共に表示されることを意味しますが、すべてのマーカーで 5 秒です。時間が長いほど、そのうちの 1 つ (常に同じもの) に留まる時間が長くなり、他のマーカーで非常に高速になります。chrome では、イテレーションが速すぎて、他の latlng のイテレーションを見ることができませんでした。それはただのまばたきでした。
b) 問題は、for ループまたは $.each (あらゆる種類の組み合わせを使用しました.....) のいずれかを使用する getJson (または Ajax) が、関数 changeMarker 内の他のループと組み合わされていることだと思います。したがって、2 つのループが同時に進行しています。しかし、私はそれを修正する方法がわかりません。$.each または for ループの直後に Ajax (または getJson) を閉じると、残りのコードは値を取得しません。何も起こりません (デバッグ目的の私のアラートだけです)。
いいえ、私はクロージャを完全には理解していません。はい、私はたくさんのものを読みました。主なものはこちらですが、こことこことそこもあります。しかし、まだそれを理解していませんでした:/
c) 何日も問題を解決しようとしているのに、初心者であることは容易ではありません。
どんな助けでも大歓迎です!
これがコードです - map が個人的なオプションを取得する長いセクションを省略しました。
var BERLIN = new google.maps.LatLng(-32.517683, -46.394393);
var map = null;
var marker = null;
var index = 0;
var infoWindow = null;
var latlng ;
var MY_MAPTYPE_ID = 'custom_style';
function initialize() {
//personal options not included here.
var customMapType = new google.maps.StyledMapType(featureOpts, styledMapOptions);
map.mapTypes.set(MY_MAPTYPE_ID, customMapType);
$.getJSON('php/locationsJson.php',function(json){
$.each( json, function(i, item) {
var lat = this.lat;
var lng = this.lng;
var location = new google.maps.LatLng(json[i].lat,json[i].lng);
alert( json[i].lat +','+json[i].lng );
function dropMarker (map, pos){
return new google.maps.Marker({
map: map,
position: location,
draggable: false,
}); // return
}
function changeMarker() {
if (marker) {
infoWindow.close();
marker.setMap(null);
}
var pos = location[index];
marker = dropMarker(map,pos);
var contentString = ('lat: ' + location.lat() + '<br />' + 'lng: ' + location.lng())
infoWindow.setContent(contentString);
setTimeout(function () {
infoWindow.open(map, marker);
}, 100);
index = (index + 1) % json.length;
setTimeout(function () {
changeMarker();
}, 4000);
}
var customMapType = new google.maps.StyledMapType(featureOpts, styledMapOptions);
infoWindow = new google.maps.InfoWindow()
changeMarker();
}); //$.each
}); //end of getjson
} //end of initialized
これは、AJAXの前のコードのフィドルです(その点に到達するための助けに感謝します)。json ファイルをフィドルに追加しようとしましたが、複雑すぎてフィドル内に json を追加できません。
お時間をいただきありがとうございました。