我创建了一个函数,它将创建一个标记数组,其中包含使用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(杂货店)
如果我在setPOIMarkerArray中console.log(array)
,它确实会显示结果。
我认为这是因为代码不会等待响应从谷歌API返回。我该怎么做才能解决这个问题,或者问题是什么?感谢
答案 0 :(得分:0)
search
函数是异步执行的,因此array
只会在收到响应后添加标记。浏览器在后台执行此请求并且不等待它响应,这就是在调用函数后数组直接为空的原因。
编辑:你不需要做任何事情来克服它。它正在做它应该做的事情。但是,如果您希望在搜索返回响应时收到通知,则可以在回调中添加函数调用。
示例:添加标记时显示警告。
function marker_added() { alert('marker added'); }
//callback code here...
array.push(marker);
marker_added();