2017-02-06 2 views
-1

Ich habe folgende Funktion.Einstellen einer Variablen in Funktionsparameter

function geocodePosition(pos, inputField) { 
    var retvalue = ""; 
    geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({latLng: pos}, function (results, status) { 

      if (status == google.maps.GeocoderStatus.OK) { 
       retvalue = results[0].formatted_address; 
       inputField.value = retvalue; 
      } else { 
      alert('Cannot determine address at this location status [' + status + "]"); 
      } 

    }); 
    alert ("retvalue : " + retvalue); 
    return retvalue; 
} 

Ich weiß, dass ich etwas Grundlegendes hier vermisse. Aber retvalue in der Alert-Anweisung ist immer leer. Wie stelle ich es im Funktionsblock des Aufrufs zum Geocode ein.

Mit freundlichen Grüßen

Michael

+0

Die 'retvalue' ist nur in den Rückruf von' geocoder.geocode verfügbar ({latLng: pos} function (Ergebnisse, status) {' –

Antwort

0

Dies liegt daran, das Geokodierungsprozess async ist. Dies bedeutet, dass Ihre Warnung ausgeführt wird, bevor die Daten vorhanden sind. Sie könnten eine Callback-Funktion wie folgt verwenden:

reverseGeocoder: function (lat, lng, callback) { 

    var geocoder = new google.maps.Geocoder; 
    var addressComponents = {}; 
    geocoder.geocode({ 
     'location': { 
      lat:lat, 
      lng: lng 
     } 
    }, function (results, status){ 
     if(status === google.maps.GeocoderStatus.OK){ 

       callback(results); 
      } else { 
       alert('No information found.'); 
      } 

     }else { 
      alert("Error "+status); 
     } 
    }); 

Verbrauch:

doGeocode (lat, lng, function (response){ 
//here are your data 
)}; 
+0

Vielen Dank Ich habe den Code modifiziert, um den MapMarker an die Funktion reversegeocode zu übergeben und den Titel des Markers mit dem Geocode-Ergebnis zu setzen. – mbieren

Verwandte Themen