2011-06-14 35 views
1

我想dispaly多个地图与PHP的循环,但我不能让它在这里工作是精简的代码...多谷歌地图用PHP循环

<!doctype html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/> 
    <title>Google Maps JavaScript API Example</title> 
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true&amp;key=ABQIAAAA5iXFaQoABBiRl7JNx5HFuxSa5RD4FXABRIVtLveK1-E6gmai7BR1Y63hhzwAO9ZPoNDgLDBQ_Z6B4Q" type="text/javascript"></script> 


    </head> 
    <body onload="load()" onunload="GUnload()"> 


    <?php 

    if($_POST['select'] == "place"){ 

    $posts = $facebook->api("https://stackoverflow.com/search?q=".urlencode($_POST['search'])."&type=".urlencode($_POST['select'])."&center=".urlencode($_POST['center'])."&distance=".urlencode($_POST['distance']).""); 

    //print_r($posts); 
    $num = "1"; 
    $num2 = "1"; 
    foreach($posts as $v) { 

     foreach($v as $v2) { ?> 

     <div> 
     <script type="text/javascript"> 

    //<![CDATA[ 
    function load() { 
     if (GBrowserIsCompatible()) { 
     var map = new GMap2(document.getElementById("map-<?php echo $num++; ?>")); 
     map.setCenter(new GLatLng(<?php echo $v2['location']['latitude']; ?>, <?php echo $v2['location']['longitude']; ?>), 13); 
     } 
    } 
    //]]> 
     <div id="map-<?php echo $num2++; ?>" style="width: 500px; height: 300px"></div> 
     <p><?php echo $v2['location']['latitude']; ?></p> 
     <p><?php echo $v2['location']['longitude']; ?></p> 
     </div> 
     <?php 

     } 

    } 


    } 

    } 

    ?> 



    </body> 
</html> 

我试图把javascript的在循环内,但这不起作用。

有没有人有任何建议,目前它只会显示循环内的最后一张地图?

谢谢

回答

2

我可以告诉你为什么它不起作用。您每次通过循环重新定义相同的load()函数。所以当文档加载和load()被调用时,它只是显示最后的地图。顺便说一句,你也应该使用谷歌地图V3 API而不是V2,但这是一个不同的话题。

像这样的东西应该解决这个问题。首先,把这个在<头>部分:

<script type="text/javascript"> 
var loaders = []; 
function load() { 
    for (var i = 1; i < loaders.length; i++) { 
     loaders[i](); 
    } 
} 
</script> 

然后你的循环改成这样:

foreach($posts as $v) { 

    foreach($v as $v2) { ?> 

    <div> 
    <script type="text/javascript"> 

//<![CDATA[ 

loaders[<?php echo $num; ?>] = function() { 
    if (GBrowserIsCompatible()) { 
    var map = new GMap2(document.getElementById("map-<?php echo $num++; ?>")); 
    map.setCenter(new GLatLng(<?php echo $v2['location']['latitude']; ?>, <?php echo $v2['location']['longitude']; ?>), 13); 
    } 
}; 
//]]> 
    <div id="map-<?php echo $num2++; ?>" style="width: 500px; height: 300px"></div> 
    <p><?php echo $v2['location']['latitude']; ?></p> 
    <p><?php echo $v2['location']['longitude']; ?></p> 
    </div> 
    <?php 

    } 

}