2017-12-22 3 views
0

ich habe ein Problem mit Google Marker der Maps API bekommen,Google Maps API, für Schleife in einem Marker und Attributen zu ändern

hier ist der Code einer Ajax-succes-Funktion (Karte ein Argument der Funktion ist, dass enthalten diesen Code):

success: function(data) { 
    var tmpmap = map;       //Without this the map wont let me add markers 
    ris = JSON.parse(data);     //Parsing to json 
    for (var i = 0; i < ris.length - 1; i++) {//Here is the for 
     var id = ris[i].id_sede;    //Here i get the id from the json 
     var marker = new google.maps.Marker({ //Here i create the marker 
     map: tmpmap, 
     mid: id,       //And there is where i got that problem. 
     position: { 
     lat: parseFloat(ris[i].latitude), 
     lng: parseFloat(ris[i].longitude) 
     } 
}); 

die Daten, die ajax sammeln eine normale SQL-Abfrage ist, die Breite enthält, Länge der ID und einige zusätzliche Informationen.

Das Problem ist also: Bei jedem Zyklus der for, nimmt jeder zuvor erstellte Marker den Wert der aktuellen "Mitte" (Karten-ID) an.

TL, statt 1 2 3 und 4

DR ich habe 4 Marker, die als Mitte 1 2 3 und 4 am Ende des Zyklus alle Marker 4 als ein Wert von Mitte haben musste und Die letzte Frage ist: Wie kann ich dieses Verhalten verhindern? Mache ich Markierungen richtig? Und warum, wenn ich den Wert eines Markers ändere, machen alle anderen Marker dasselbe?

Antwort

0

Sie haben ein IIFE zu verwenden, so dass jeder Hersteller wird es eigene Daten:

success: function (data) { 
    var tmpmap = map; //Without this the map wont let me add markers 
    ris = JSON.parse(data); //Parsing to json 
    for (var i = 0; i < ris.length - 1; i++) { //Here is the for 
    // IIFE 
    (function (entry) { 
     // remember original element as variable entry 
     var marker = new google.maps.Marker({ //Here i create the marker 
     map: tmpmap, 
     mid: entry.id_sede, // still the original ID 
     position: { 
      lat: parseFloat(entry.latitude), 
      lng: parseFloat(entry.longitude) 
     } 
     }); 
    }) (ris[i]); // pass original element into IIFEE 
    } 
}); 

Denn ohne IIFE, bis der erste Marker seine ID bekommt die Variable i haben könnte erreicht bereits die Bedingung ris.length - 1. In diesem Fall enthält die Variable id nicht die ID des ersten Markers.

Mit einem IIFE können Sie das ursprüngliche Eintragselement aus ris verwenden.

Hoffe, das hilft.

+0

Danke, das hat sehr geholfen! –

+0

Sie sind willkommen :) – Blauharley

+0

Wenn es Ihnen geholfen hat, alle Probleme zu lösen, bitte, markieren Sie es als richtige Antwort, danke. – Blauharley