私のアプリは、JavaScript、Google Maps API、PHP、および mysql を使用しています。mysql データベースからマーカーのリストを取得し、それを myXML.xml ファイルにダンプしてから、このファイルを読み取って、マップがロードされるたびにマップ上にこれらのマーカーを描画することになっています。
<!DOCTYPE html>
<html>
<head>
<script>...</script>
<script>
function initialize()
{
...
//load previous markers from dbase
**loadMarkers();**
map = new google.maps.Map(document.getElementById("googleMap"),mapProp);
}
google.maps.event.addDomListener(window, 'load', initialize);
//loadMarkers
function **loadMarkers()**
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var xmlDoc=document.implementation.createDocument("","",null);
***//alert("here1");***
xmlDoc.load("myXML.xml");
xmlDoc.async=false;
***//alert("here2");***
//xmlDoc.onload=doNothing;
var markerNodes = xmlDoc.documentElement.getElementsByTagName("marker");
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < markerNodes.length; i++)
{
var RowID = markerNodes[i].getAttribute("RowID");
var LatLng = markerNodes[i].getAttribute("LatLng");
var Type = markerNodes[i].getAttribute("Type");
alert(Type);
//Separate Lat and Lng from LatLng
var string = LatLng;
var n=string.indexOf(",");
var Lat = string.slice(1,n);
var n2=string.indexOf(")");
var Lng = string.slice(n+2,n2);
//Set Marker Type
if(Type=="hospital")
markerIcon='markHospital.png';
if(Type=="airport")
markerIcon="airport.jpg";
var marker3=new google.maps.Marker({
position:new google.maps.LatLng(Lat,Lng),
icon:markerIcon
//icon:'markHospital.png'
//animation:google.maps.Animation.BOUNCE
});
marker3.setMap(map);
}
}
}
//xmlhttp.open("GET","addmarker.php?maidenLatLng="+maidenLatLng+"&clickID="+clickID,true);
var queryString = "";
xmlhttp.open("GET", "getmarkers.php" + queryString, true);
xmlhttp.send();
}
...
コードは正常に動作しているように見えますが、2 つのアラート メッセージ ( loadMarkers()内) がコメント化されていない場合のみです。それらがコメントアウトされた瞬間(現在のように)、古いマーカーは読み込まれず、表示されません。
これはある種のタイミングの問題だと思います。スクリプトがその時点に達したときに、myXML.xml ファイルの準備ができていない可能性があります。そのため、XMLHTTPRequest の async プロパティも false に設定します。しかし、それも役に立ちませんでした。2 つのアラートボックスの実行が許可されている場合にのみ、このスクリプトが機能するのはなぜですか?
どんな助けでも大歓迎です:)