Javascript 将Marker Clusterer设置为Ajax之后的异步

Javascript 将Marker Clusterer设置为Ajax之后的异步,javascript,ajax,google-maps,google-maps-api-3,Javascript,Ajax,Google Maps,Google Maps Api 3,我有一个谷歌地图v3在我的网页上,这将与许多标记(3000-5000)设置 这是我现在的简短代码: function initialize(){ var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); $.ajax({ type: 'POST', dataType: 'json', url:

我有一个谷歌地图v3在我的网页上,这将与许多标记(3000-5000)设置

这是我现在的简短代码:

function initialize(){
    var map = new google.maps.Map(document.getElementById("map_canvas"),
                mapOptions);

    $.ajax({
        type: 'POST',
        dataType: 'json',
        url: Routing.generate('turn_getajaxfirstpoiofallturns'),
        async: false
    })
    .done(function(response){
        firstPoiOfAllTurns = response;
        for (var i = 0; i < firstPoiOfAllTurns.length; ++i) {
            markers.push(addMarker(map, firstPoiOfAllTurns[i].pois[0], firstPoiOfAllTurns[i].id, '' ,infowindow));
         }
    })
    .fail(function(jqXHR, textStatus, errorThrown){
        alert('Error : ' + errorThrown);
    });

    var mcOptions = {gridSize: 50, maxZoom: 15};
    var mc = new MarkerClusterer(map, markers, mcOptions);
}

google.maps.event.addDomListener(window, 'load', initialize);
函数初始化(){
var map=new google.maps.map(document.getElementById(“map_canvas”),
地图选项);
$.ajax({
键入:“POST”,
数据类型:“json”,
url:Routing.generate('turn\u getajaxfirstpoiofallturns'),
异步:false
})
.完成(功能(响应){
firstPoiOfAllTurns=响应;
对于(变量i=0;i
我想去掉这段代码中的
async:false
部分,这样即使尚未设置标记,站点也能正常工作。到目前为止这是可行的,但是如果我去掉
async:false
,就不会设置MarkerClusterer。因此,将显示标记,但如果没有群集,贴图速度非常慢

然后,我尝试在
.done
函数中获取这两行代码,但它也不起作用


如何将markerclusterer设置为映射异步,以便在ajax函数完成后标记显示为集群?

您可以在ajax调用之前创建marker clusterer,并将每个创建的标记添加到for循环中的marker clusterer中:

    for (var i = 0; i < firstPoiOfAllTurns.length; ++i) {
        // markers.push(addMarker(map, firstPoiOfAllTurns[i].pois[0], firstPoiOfAllTurns[i].id, '' ,infowindow));

        mc.addMarker(addMarker(map, firstPoiOfAllTurns[i].pois[0], firstPoiOfAllTurns[i].id, '' ,infowindow), true);
     }
for(变量i=0;i

我假设
addMarker()
创建一个新的标记。

另一个选项是在创建标记的回调函数中移动clusterer的创建和初始化:

.done(function(response){
    firstPoiOfAllTurns = response;
    for (var i = 0; i < firstPoiOfAllTurns.length; ++i) {
        markers.push(addMarker(map, firstPoiOfAllTurns[i].pois[0], firstPoiOfAllTurns[i].id, '' ,infowindow));
     }
     var mcOptions = {gridSize: 50, maxZoom: 15};
     var mc = new MarkerClusterer(map, markers, mcOptions);
})
.done(函数(响应){
firstPoiOfAllTurns=响应;
对于(变量i=0;i
我首先想到的是可能的重复,但它不会改变任何事情:/但是没有错误,我不知道为什么它不工作。今天我再次尝试,我可以用
mc.addMarker(addMarker(map,firstPoiOfAllTurns[i].pois[0],firstPoiOfAllTurns[i].id',infowindow)解决它;mc.draw()谢谢!我所需要的就是添加标记(myMarker)。谢谢