谷歌地图放置API - 如何使代码等待响应?

时间:2011-10-22 23:00:55

标签: javascript jquery google-maps

我创建了一个函数,它将创建一个标记数组,其中包含使用Places API获取的地点。 type参数用于场所类型,图标用于标记图标。

function setPOIMarkerArray(type, icon) {

var array = new Array();

var request = {
    location: map.getCenter(),
    radius: '2000',
    types: [type]
};

var service = new google.maps.places.PlacesService(map);
service.search(request, function(results, status) {
    if (status == google.maps.places.PlacesServiceStatus.OK) {  
        for (i in results) {
            place = results[i];

            var marker = new google.maps.Marker({
                icon: icon,
                position: new google.maps.LatLng(place.geometry.location.lat(), place.geometry.location.lng())
            });

            google.maps.event.addListener(marker, 'click', function() {
                var content = '<img class="left-arrow-grocery" src="/img/leftArrow.png"><div class="grocery-infobox">' + place.name + '<br/>' + place.vicinity + '</div>';
                ib.setContent(content);
                ib.open(map, marker);
            });

            array.push(marker);

        }

        return array;       

    }

});
}

当我使用$(function(){});调用此代码时,我会调用var groceryStores = setPOIMarkerArray('grocery_or_supermarket','grocery.png')来设置地图和其他内容 但是如果我在console.log(杂货店)

,那么groceryStores数组最终会变空

如果我在setPOIMarkerArray中console.log(array),它确实会显示结果。

我认为这是因为代码不会等待响应从谷歌API返回。我该怎么做才能解决这个问题,或者问题是什么?感谢

1 个答案:

答案 0 :(得分:0)

search函数是异步执行的,因此array只会在收到响应后添加标记。浏览器在后台执行此请求并且不等待它响应,这就是在调用函数后数组直接为空的原因。

编辑:你不需要做任何事情来克服它。它正在做它应该做的事情。但是,如果您希望在搜索返回响应时收到通知,则可以在回调中添加函数调用。

示例:添加标记时显示警告。

function marker_added() { alert('marker added'); }

//callback code here...
array.push(marker);
marker_added();