-1

Geocoder method does not return values when calling it from a button click. I need the results to be stored in global variables "source_lat" and "source_long". Seems like my button click ends before geocoder could return values.

 function GeocoderStart(str) {
           geocoder = new google.maps.Geocoder();
               geocoder_request = { 'address': str };
               geocoder.geocode(geocoder_request, function (results, status) {
                   if (status == google.maps.GeocoderStatus.OK) {
                       var country = extractFromAdress(results[0].address_components, "country");
                       if ((country != "India") & (country != "")) {
                           //alert("Error", "The address you entered refers to <b>" + results[0].formatted_address + "</b>. Please select only addresses in India using the autocomplete lookup.");                        
                           alert("Please select a valid address");
                           return false;
                       } else {
                           source_lat = results[0].geometry.location.lat();
                           source_long = results[0].geometry.location.lng();
                       }
                   } else {
                       alert("Error", "Unable to lookup address for the following reason: " + status);
                       return false;
                   }                  
               });

}

//Extract from address function

 function extractFromAdress(components, type) {  // taken from http://stackoverflow.com/questions/8313876/more-efficient-way-to-extract-address-components
            for (var i = 0; i < components.length; i++)
                for (var j = 0; j < components[i].types.length; j++)
                    if (components[i].types[j] == type) return components[i].long_name;
            return "";
        }
Suresh Savage
  • 425
  • 2
  • 7
  • 16

1 Answers1

0

heres how I achieve geocode on a recent project - maybe it'll help shed light on the issue you're facing:

$.getJSON("http://maps.googleapis.com/maps/api/geocode/json?address=1600%20Pensyvania%20Ave%20Washington%20DC&sensor=false",
dataType = 'json',
function (data) {

    if (data['results']) {

         var country = data['results'][0]['address_components'][0]['long_name'];
         if ((country != "India") & (country != "")) {

            console.log("sorry, wrong country:)");

        } else {

            console.log("lat: " + data['results'][0]['geometry']['location']['lat'] + ",  lng: " + data['results'][0]['geometry']['location']['lng']);

        }
    }

});
tamak
  • 1,541
  • 2
  • 19
  • 39