0

Ich versuche, eine Markierung auf meiner Karte zu platzieren und dann die Position dieser Markierung zu verwenden, um einige Polygone zu zeichnen. Marker.getPosition() scheint jedoch anfangs keinen Wert zurückzugeben. Ich müsste die Funktion erneut aufrufen, um die vorherige Markerposition zu erhalten. Hat jemand irgendwelche Vorschläge, warum dies istKartenmarker getPosition() funktioniert nicht für Google Maps beim ersten Aufruf der Funktion

function codeAddress() { 
    var address = fubar; 
    geocoder.geocode({ 'address': address}, function(results, status) { 
     map.setCenter(results[0].geometry.location); 
     map.setZoom(1); 
     if (marker == null){ 
     marker = new google.maps.Marker({ 
      map: map, 
     }); 
     } 
     marker.setPosition(results[0].geometry.location); 
    }); 
    document.write(marker.getPosition()); //this displays nothing 
} 

Antwort

4

Google Maps ist Rückrufe verwenden, (see parameter 2 in the documentation), weil seine not synchronous. Das function(results,status) Bit ist, wo die Magie passiert. Es wird ausgeführt, wenn Google die Adresse geocodiert hat. Bis dahin hast du nichts zu zeigen.

versuchen Sie dies:

function codeAddress() { 
    var address = fubar; 
    geocoder.geocode({ 'address': address}, function(results, status) { 
     map.setCenter(results[0].geometry.location); 
     map.setZoom(1); 
     if (marker == null){ 
      marker = new google.maps.Marker({ 
       map: map, 
      }); 
     } 
     marker.setPosition(results[0].geometry.location); 
     alert("Alert 1"); 
     alert(marker.getPosition()); 
    }); 
    alert("Alert 2"); 
} 

Und Sie werden sehen, dass alert("Alert 2") erscheint vor alert("Alert 1")

+0

Alle Empfehlungen auf das, was der beste Weg, um dies zu umgehen wäre das? – user1330217

+0

Sie können nicht umgehen, müssen Sie Ihre Logik in den Rückruf (genau wie die Warnungen). Wenn Sie Text auf der Website einfügen/bearbeiten müssen, empfehle ich [jQuery] (http://www.jquery.com) –

1

Sie Vorteil von .Deferred $ nehmen könnte()

function codeAddress() { 
    var address = fubar; 
    var d = $.Deferred(); 
    var marker; 

    geocoder.geocode({ 'address': address}, function(results, status) { 
     map.setCenter(results[0].geometry.location); 
     map.setZoom(1); 
     if (marker == null){ 
     marker = new google.maps.Marker({ 
      map: map, 
     }); 
     } 
     marker.setPosition(results[0].geometry.location); 
     d.resolve(); 
    }); 
    d.done(function(){ 
     document.write(marker.getPosition()); 
    }); 
}