2014-01-06 3 views
-1

Метод геокодирования не возвращает значения при вызове его с помощью нажатия кнопки. Мне нужны результаты, которые будут храниться в глобальных переменных «source_lat» и «source_long». Кажется, что мой клик заканчивается, прежде чем геокодер может вернуть значения.Метод геокодера не возвращает значения

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; 
        }     
       }); 

}

// Извлечение из адресной функции

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 ""; 
     } 
+0

Не так ли асинхронный? –

+0

Что вы получаете? Предупреждение _Пожалуйста, выберите действительный адрес_ или другой? – putvande

+0

@ A.Wolff да, это так. –

ответ

0

вот как я достигаю геокод на недавнем проекте - возможно, это поможет пролить свет на вопрос вы столкнулись:

$.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']); 

     } 
    } 

}); 
Смежные вопросы