2

我的应用程序使用 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();
}

    ...

该代码似乎工作正常,但只有当两个警报消息(在loadMarkers()内)没有被注释掉时。当它们被注释掉(就像现在一样)时,旧标记不会加载并且不可见。

我怀疑这是某种时间问题。可能是脚本到达该点时 myXML.xml 文件尚未准备好。因此,我还将 XMLHTTPRequest 的 async 属性设置为 false。但这也无济于事。知道为什么此脚本仅在允许运行两个警报框时才有效吗?

任何帮助将不胜感激 :)

4

1 回答 1

0

如果您使用的是 jQuery,则可以使用ajaxComplete之类的东西,仅在 AJAX 请求完成后才从 XML 中加载所有标记。

于 2012-11-21T09:13:37.697 回答