Отображение координат со многих адресов (Google Map API) Геокодирование - PullRequest
1 голос
/ 26 июня 2019

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

Я пытался использовать функцию while, чтобы получить три адреса, и использовать console.log(i), чтобы показать значение i, но он показывает только третий.

PHP:

<?php $count = 0?>
<?php foreach($get_address as $get) {?>
<?php $count += 1;?>
<input type="text" id="address_<?=$count?>" value="<?=$get->address?>">
<input type="text" id="latitude_<?=$count?>">
<input type="text" id="longitude_<?=$count?>"><br>
<?php } ?>
<input type="hidden" id="count_address" value="<?=$count_address->count_address?>"><br>

JavaScript:

function getCoor(){
    var count = 3;
    var i = 1;
while(true){

var geocoder = new google.maps.Geocoder();
var address = $("#address_"+i).val();

geocoder.geocode( { 'address': address}, function(results, status) {

if (status == google.maps.GeocoderStatus.OK) {
 var latitude = results[0].geometry.location.lat();
 var longitude = results[0].geometry.location.lng();
 $("#latitude_"+i).val(latitude);
 $("#longitude_"+i).val(longitude);
 console.log(i);

      } 
});

    if(count == i){
        break;
    }
     i += 1;
    }

}

1 Ответ

0 голосов
/ 27 июня 2019

Это потому, что geocoder.geocode является асинхронным вызовом.

Подробнее о let здесь

См. здесь проблема, с которой вы столкнулись.

Попробуйте код ниже.

function getCoor(){
  let count = 3;

  for (let i = 1; i < count; i++) {
    let geocoder = new google.maps.Geocoder();
    let address = $("#address_"+i).val();

    geocoder.geocode( { 'address': address}, function(results, status) {

      if (status == google.maps.GeocoderStatus.OK) {
         let latitude = results[0].geometry.location.lat();
         let longitude = results[0].geometry.location.lng();
         $("#latitude_"+i).val(latitude);
         $("#longitude_"+i).val(longitude);
         console.log(i);
      } 
    });
  }
}
...