UNDEFINED ではなく情報ウィンドウに正しい値を返す関数内に依存データを配置するコードに変更を加えました。
ここで問題が発生します。1 つのマーカーのみが印刷されます。
var geocoder;
var map;
function load() {
geocoder = new google.maps.Geocoder();
map = new google.maps.Map(document.getElementById("map"), {
center: new google.maps.LatLng(57.699322, 11.951093),
zoom: 6,
minZoom: 6,
maxZoom: 18,
mapTypeId: 'roadmap'
});
var infoWindow = new google.maps.InfoWindow;
// Get the xml data
downloadUrl("functions.php", function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var point = new google.maps.LatLng(markers[i].getAttribute("lat"),markers[i].getAttribute("lng"));
codeLatLng(point, function(addr){
var name = markers[i].getAttribute("name").replace("_"," ");
var html = '<div class="markTitle">' + name.replace("_"," ") + '</div>'
+ '<div class="markAddress">'+addr+'</div>'
+ '<a class="markLink" href="http://www.wikiplace.se/index.php?title='+ name +'">'
+ 'Läs mer om '+ name.replace("_"," ") + ' här...</a>';
var marker = new google.maps.Marker({
map: map,
position: point,
uid: "id"+i});
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(html);
infoWindow.open(map, marker);});
}); // end codeLatLng
} // end for-loop
});// end downloadURL
}
このコードはうまくいくようです。
function codeLatLng(point, callback) {
geocoder.geocode({'latLng': point}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
callback(results[1].formatted_address);
} else {
alert("Couldn't find address");
}
} else {
alert('Geocoder failed due to: ' + status);
}
});
}
XML ファイルのエラーもチェックしましたが、形式は正しいです。誰かがこれに対する解決策を持っていますか?
ありがとう