Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Google maps v3 API上异步添加标记?_Javascript_Ajax_Google Maps_Jquery_Google Maps Api 3 - Fatal编程技术网

Javascript 如何在Google maps v3 API上异步添加标记?

Javascript 如何在Google maps v3 API上异步添加标记?,javascript,ajax,google-maps,jquery,google-maps-api-3,Javascript,Ajax,Google Maps,Jquery,Google Maps Api 3,到目前为止,我一直在跟踪地图上的地图 然而,我一次最多只能看到一个标记。如果我尝试添加另一个标记,那么它就不起作用(我甚至看不到第一个标记)。 我的过程如下: 我初始化gmaps api: jQuery(window).ready(function(){ //If we click on Find me Lakes jQuery("#btnInit").click(initiate_geolocation); }); function

到目前为止,我一直在跟踪地图上的地图

然而,我一次最多只能看到一个标记。如果我尝试添加另一个标记,那么它就不起作用(我甚至看不到第一个标记)。 我的过程如下:

我初始化gmaps api:

    jQuery(window).ready(function(){ 
        //If we click on Find me Lakes
        jQuery("#btnInit").click(initiate_geolocation);
    });

    function initiate_geolocation() {  
        if (navigator.geolocation)  
        {  
            var script = document.createElement("script");
            script.type = "text/javascript";
            script.src = "https://maps.googleapis.com/maps/api/js?key=AIzaSyBbfJJVh0jL1X9b7XFDcPuV7nHD1HlfsKs&sensor=true&callback=initialize";
            document.body.appendChild(script);

            navigator.geolocation.getCurrentPosition(handle_geolocation_query, handle_errors);
        }  
        else  
        {  
            yqlgeo.get('visitor', normalize_yql_response);
        }  
    }
然后,我将它显示在适当的div上。但是,在进行AJAX调用时,为了获得我想要显示的不同标记的位置,它不能正常工作。下面是显示了一个简单地图的代码(因为这是到目前为止唯一对我有效的东西)

所以我想在AJAX调用之后添加标记。我已经设置了一个应该在when()中调用的函数

在foreach循环中显示标记,但不显示,无法使其工作。看起来是这样的:

CentralPark = new google.maps.LatLng(37.7699298, -122.4469157);
marker = new google.maps.Marker({
    position: location,
    map: map
});
任何帮助都会很好


感谢主要问题是
map
变量仅在slideToggle上的匿名回调范围内声明。首先,在顶级函数范围中声明

function handle_geolocation_query(position){ 

    var map,
        mapOptions = {
            zoom: 14,
            center: new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
            mapTypeId: google.maps.MapTypeId.SATELLITE
        }
    ...
然后更改slideToggle回调以初始化变量,而不是重新声明:

$('#map-canvas').slideToggle('slow', function(){
    map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
});
然后您应该将
map
作为第二个参数传递给
initializegoglemaps
函数,并使用
initializegoglemaps(results,map)
调用它。看看这对你有什么影响,有什么问题就给我回电

function handle_geolocation_query(position){ 

    var map,
        mapOptions = {
            zoom: 14,
            center: new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
            mapTypeId: google.maps.MapTypeId.SATELLITE
        }
    ...
$('#map-canvas').slideToggle('slow', function(){
    map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
});