2013-11-13 2 views
0

Я использую API карт Google. Я хочу получить lat и long с заданным адресом. Я сделал этоПредотвращение петли внутри геокодирования API Карт Google

var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 'address': 'Stockholm' }, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      var latitude = results[0].geometry.location.nb; 
      var longitude = results[0].geometry.location.ob; 
      console.log(latitude); 
     } 
}); 

Однако я получаю, что консольный журнал работает многократно. Я просто хочу, чтобы он работал один раз, но я не нашел никакой идеи.

+0

Код, который вы добавили в этот номер, будет выполняться один раз для запроса на геокодирование. Возможно, если вы добавите весь свой код в jsfiddle, мы можем лучше понять, что происходит. – Andy

+0

есть ли способ запустить только первый запрос? –

ответ

0

Объявление новой переменной, которая показывает, было ли вызвано геокодирование и в первый раз это значение изменилось на true.

var geoCalled = false; 

var geocoder = new google.maps.Geocoder(); 
geocoder.geocode({ 'address': 'Stockholm' }, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
    var latitude = results[0].geometry.location.nb; 
    var longitude = results[0].geometry.location.ob; 
    if (!geoCalled) { 
     console.log(latitude); 
     geoCalled = true; 
    } 
    } 
}); 
+1

Я думал об этом раньше, но он не будет работать, так как функция обратного вызова работает асинхронно. Итак, geoCalled var не определен, потому что он находится в разной области. –

+0

Я так не думаю. 'geoCalled' всегда будет либо' false', либо 'true'; объем не имеет значения. Посмотрите на это [jsfiddle] (http://jsfiddle.net/andyuws/3r4b3/59/), чтобы понять, что я имею в виду. – Andy

Смежные вопросы