2016-10-30 2 views
0

Ich habe eine Google Map auf meiner Webseite und verwendet geoxml3 um die Ebenen zu analysieren (mit vielen Ortsmarkierungen).Entfernen Sie ältere geoxml3 Ebenen beim Aktualisieren

Es gibt einen Timer, der alle 10 Sekunden eine JQuery auslöst, um die neue .kml-Datei abzurufen. Ich möchte jedoch die alte Ebene entfernen, bevor ich die neue Ebene analysiere.

Frage: Was ist der richtige Weg zum Entfernen/Zerstören?

Ich weiß, es gibt eine geoXml.hideDocument();, aber das verbirgt nur die Schicht, es entfernt/zerstört die Schicht nicht richtig? (Unten ist die hideDocument() -Implementierung)

RefreshMap() - vorherige Schicht verstecken und zeigen neue Ebene

$.ajax({ 
    url: url, 
    dataType: 'json', 
    type: 'get', 
    contentType: 'application/x-www-form-urlencoded', 
    data: "", 
    success: function (data, textStatus, jQxhr) { 
     if (data['success'] == 1) { 
      if (geoXml) 
       geoXml.hideDocument(); 
      var src = data['kml']; 
      geoXml = new geoXML3.parser({ 
       map: map, 
       suppressInfoWindows: false, 
       singleInfoWindow: true, 
       infoWindow: infowindow, 
       zoom : false 
      }); 
      geoXml.parse(src); 
      geoXml.showDocument(); 
     } 
    }, 
    error: function (jqXhr, textStatus, errorThrown) { 
     console.log(errorThrown); 
    } 
}); 

Obwohl dies funktioniert, aber meine Sorge ist, dass, wenn es alle Daten ziehen 10 hält Sekunden, wenn die Seite für 1 Stunde geöffnet wird, wird es zu Verzögerungen kommen? Der Grund dafür ist, dass die Überlagerungen nicht wirklich zerstört/entfernt werden, sie sind immer noch im Speicher, nur dass wir den Bezug auf sie verlieren (weil jetzt Bezugspunkt auf die neue Ebene ist).

aktualisieren

ich einige Informationen online zu finden, scheint, wie ich nicht über diese Umsetzung zu kümmern.

„Da Javascript Müll gesammelt wird, brauchen Sie nicht löschen Objekte selbst - sie entfernt werden, wenn es keine Möglichkeit zu bezeichnen sie mehr ist.“

Antwort

0

Ich habe ein test case , die dies effektiv funktioniert:

filename="http://www.geocodezip.com/dynamicmarkerkml.php"; 
geoXml.parse(filename); 
setInterval("geoXml.hideDocument();geoXml.parse(filename)", 5000); 

für Speicher nicht undicht, dass ich sehen kann, und ich habe es seit einigen Tagen laufen habe (an einem Punkt, nicht vor kurzem).

Verwandte Themen