title: Google Maps API Marker Clusterer and Ajax
body: <p>I am running multiple ajax calls to download a large number of google maps icons. When I try to increment the Marker Clusterer, however, the map clears all markers. I believe this is because I am calling <code>var markerCluster = new MarkerCluster(map);</code> in each AJAX call.</p>
  
  <p>Can anyone tell me how to correctly implement this?</p>
  
  <pre><code>var populateMapByIncident = function(incident, page) {
    var run_again = false;
    $.getJSON(
      "/public_map_ajax_handler",
      {"shortname" : incident, "page": page},
      function(sites_list) {
      if (sites_list.length &gt; 2) {
        run_again = true;
      }
            var mapOptions = {
      zoom: 8,
      center: new google.maps.LatLng(40.6501038, -73.8495823),
      mapTypeId: google.maps.MapTypeId.ROADMAP
      }
      var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
         var markers = [];
         var i = 0;
  
  
     for (var i = 0; i &lt; sites_list.length; i++) {
   var latLng = new google.maps.LatLng(sites_list[i].latitude, sites_list[i].longitude);
   var marker = new google.maps.Marker({'position': latLng, 
                       'icon': getMarkerIcon(sites_list[i]), 
                       'site_id': sites_list[i].id, 
                        'case_number': sites_list[i].case_number, 
                        'work_type': sites_list[i].work_type, 
                        'floors_affected': sites_list[i].floors_affected, 
                        'status': sites_list[i].status});
   markers.push(marker);
   var site_id = sites_list[i].id;
  google.maps.event.addListener(marker, "click", function() {
    new Messi('&lt;p&gt;Name, Address, Phone Number are removed from the public map&lt;/p&gt;&lt;p&gt;Details: work type: '
    + this.work_type+ ', floors affected: ' + this.floors_affected + '&lt;/p&gt;' + '&lt;p&gt;Status: ' + this.status + '&lt;/p&gt;',
    {title: 'Case Number: ' + this.case_number, titleClass: 'info', 
    buttons: [
    {id: 0, label: 'Printer Friendly', val: "On the live version, this would send all of this site's data to a printer friendly page." }, 
    {id: 1, label: 'Change Status', val: "On the live version, you would be able to change the site's status here."}, 
    {id: 2, label: 'Edit', val: "On the live version, you would be able to edit the site's info, as new details come in."}, 
    {id: 3, label: 'Claim', val: "On the live version, clicking this button would 'Claim' the site for your organization, letting other organizations know that you intend to work on that site"},
    {id: 4, label: 'Close', val: 'None'}], callback: function(val) { if (val != "None") {Messi.alert(val);} }});
  
  });
     }
  
     var markerCluster = new MarkerClusterer(map);
     markerCluster.addMarkers(markers);
  
  
      if (run_again == true) {
    populateMapByIncident(incident, page + 1, markers);
  } else {
        markerCluster.addMarkers(markers);
  }
  
  }
  
    );
  
  }
  </code></pre>