通过php文件使用ajax获取谷歌地图

时间:2014-03-25 13:37:01

标签: javascript php ajax google-maps

我想在我的主页上显示谷歌地图。此映射由此函数生成:

function addressCode(id,concatenadoAMostrarEnMapa) {
                var geocoder;
                var map;
                    geocoder = new google.maps.Geocoder();
                    var latlng = new google.maps.LatLng(-35.397, -60.644);
                    var mapOptions = {
                        zoom: 5,
                        center: latlng
                    }
                    map = new google.maps.Map(document.getElementById(id), mapOptions);

                    var address = concatenadoAMostrarEnMapa;
                    geocoder.geocode( {
                        'address': address}, function(results, status) {
                        if (status == google.maps.GeocoderStatus.OK) {
                            map.setCenter(results[0].geometry.location);
                            var marker = new google.maps.Marker({
                                map: map,
                                position: results[0].geometry.location
                            });
                        } else {
                            alert('Geocode was not successful for the following reason: ' + status);
                        }
                    }); 
                    google.maps.event.addDomListener(window, 'load',addressCode);  
                } 

此功能在主页面中定义。然后使用ajax,我调用php文件take_publications,在这个文件中我打印下面的代码:

$comillas='"' ;
    echo " <div id='$mapa'";
    echo "onload='addressCode('$mapa','$concatenadoAMostrarEnMapa')' style='position:relative; width:400px; height:400px;'> </div>";
    echo "<script >addressCode('$mapa','$concatenadoAMostrarEnMapa');";
    echo "setInterval(";
    echo $comillas."addressCode('$mapa','$concatenadoAMostrarEnMapa')".$comillas;
    echo ", 10000 );
         </script >";

$mapa是一个带有id标签的字符串,该变量在函数addressCode中用作参数。 $concatenadoAMostrarEnMapa是在函数addressCode中用作参数的地址。

问题是地图没有加载,或者更确切地说,ajax从php文件打印的脚本没有被执行。

知道发生了什么事吗?

提前致谢!

3 个答案:

答案 0 :(得分:0)

我没有确切的答案,但您可以将此代码用于您的网站..

<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script>
function initialize() {
var map_canvas = document.getElementById('map_canvas');
var map_options = {
          center: new google.maps.LatLng(24.376202, 92.163641),
          zoom: 18,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        }
var map = new google.maps.Map(map_canvas, map_options)
    }
    google.maps.event.addDomListener(window, 'load', initialize);
</script>

<div id="map_canvas"></div>

答案 1 :(得分:0)

首先,div元素没有onload个事件。

如果您真的希望在加载时执行脚本,请在addressCode事件处理程序中添加window.onload调用,如下所示:

window.onload = function(){
    //do anything here
};

然后,关于setInterval的使用,如果你不需要IE&lt; 10个用户看到你的网站,你可以这样做:

setInterval(addressCode, 1000, "#yourmap", "nohablospanishenoughtounderstandthat");

否则,你应该这样做:

setInterval(function(){ addressCode("#yourmap","blabla"); }, 1000);

(请注意,我不支持使用setInterval,您最好使用setTimeout

最后,停止使用register_globals助手。它永远不会帮助你。永远都不会。

"<div id='$mapa'"

应该是:

"div id='".$mapa."'"

毕竟,您的代码应该如下所示:

echo "<div id='".$mapa."'";
echo "style='position:relative; width:400px; height:400px;'></div>";
echo "<script>";
echo "window.onload = function(){ ";
echo "addressCode('".$mapa."','".$concatenadoAMostrarEnMapa."');";
echo "setInterval(";
echo "addressCode, 1000, '".$mapa."','".$concatenadoAMostrarEnMapa."'";
echo ");";
echo "};";
echo "</script >";

答案 2 :(得分:0)

整夜搜索后,我找到了解决方案。我不得不评估ajax带来的所有scritps,因为我插入了新的scritps,但页面已经加载了所有内容。

谢谢!