Php 如何从mysql中读取标记信息,并使用AJAX在google地图上动态显示这些标记?时间问题

Php 如何从mysql中读取标记信息,并使用AJAX在google地图上动态显示这些标记?时间问题,php,javascript,ajax,google-maps,Php,Javascript,Ajax,Google Maps,我的应用程序使用javascript、谷歌地图api、php和mysql。它应该从mysql数据库中获取标记列表,将其转储到myXML.xml文件中,然后读取该文件,以便在每次地图加载时在地图上绘制这些标记 <!DOCTYPE html> <html> <head> <script>...</script> <script> function initialize() { ... //load pr

我的应用程序使用javascript、谷歌地图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()**
map=new google.maps.map(document.getElementById(“googleMap”),mapProp);
}
google.maps.event.addDomListener(窗口“加载”,初始化);
//装载标记
函数**loadMarkers()**
{
var-xmlhttp;
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
var xmlDoc=document.implementation.createDocument(“,”,null);
***//警惕(“此处1”)***
load(“myXML.xml”);
xmlDoc.async=false;
***//警惕(“此处2”)***
//xmlDoc.onload=doNothing;
var markerNodes=xmlDoc.documentElement.getElementsByTagName(“标记”);
var bounds=new google.maps.LatLngBounds();
对于(变量i=0;i

代码似乎工作正常,但只有当两条警报消息(在loadMarkers()中未被注释掉时,代码才会正常工作。注释掉它们的那一刻(就像现在一样),旧标记就不会加载,也不可见

我怀疑这是某种时间问题。可能是当脚本到达该点时,myXML.xml文件尚未准备就绪。因此,我还将XMLHTTPRequest的async属性设置为false。但这也没用。你知道为什么这个脚本只有在两个警报框被允许运行时才起作用吗


任何帮助都将不胜感激:)

如果您使用的是jQuery,您可以使用类似这样的方法,在AJAX请求完成后仅加载XML中的所有标记。

网络控制台对myxml.XML文件的请求显示了什么?另外,为什么不从getmarkers.php返回XML呢?myxml.XML文件编写得很好。如前所述,调用alert()时,同样的代码也可以工作。所以一定是某种时间问题。也尝试使用setInterval()延迟脚本执行,但无效。我还需要单独的.xml文件:)问题是,在没有延迟的情况下,提取xml文件的请求是否成功?不是xml文件是否成功写入。我们如何检查它?sry,我是这里的新手:)如果你有Chrome,有一个带有网络标签的控制台窗口。你可以在那里看到它。在其他浏览器中,我确信也有类似的东西。例如,在Firefox中,您可以安装firebug。有没有不使用jQuery就可以实现的方法?只是好奇,设置
xmlhttp.open(“GET”,“getmarkers.php”+queryString,true)不是吗到false(接近脚本末尾)实现类似的效果?然而,我也试过了,似乎对执行没有影响。