Имеется БД где хранятся value в столбцах form_city и form_name
form_city - город
form_name - Название учебного заведения
Необходимо передать эти значения из БД в массив js для обработки geocoder
На данный момент статически написанный массив ( С ним все работает )
var address = new Array (
'Москва, Московский государственный университет имени М.В.Ломоносова',
'Санкт-Петербург, Санкт-Петербургский государственный университет'
);
Создав двумерный массив в php я попытался его передать в массив на JS
<?php
$result = db_query("SELECT value FROM webform WHERE name = 'form_name' UNION ALL SELECT value FROM webform WHERE name = 'form_city'")->fetchAllAssoc('value');
$json = json_encode($result);
?>
var address = new Array ('<?php echo $json;?>');
В ответ от geocoder я получаю за место маркеров на карте ZERO_RESULTS
По всей видимости я не правильно составляю массив
Весь код
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf8" />
<title>Жопа</title>
<style>
#map {
height: 600px;
}
</style>
</head>
<body>
<div id="map"></div>
<?php
$result = db_query("SELECT value FROM webform WHERE name = 'form_name' UNION ALL SELECT value FROM webform WHERE name = 'form_city'")->fetchAllAssoc('value');
$json = json_encode($result);
?>
<script>
var geocoder;
var map;
var address = new Array ('<?php echo $json;?>');
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
center: new google.maps.LatLng(61.52401, 105.31875600000001),
zoom: 3
});
geocoder = new google.maps.Geocoder();
address.forEach(n => codeAddress(n, geocoder, map));
}
function codeAddress(address, geocoder, map) {
geocoder.geocode({ address }, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location,
title: address
});
var infowindow = new google.maps.InfoWindow({
content: address
});
marker.addListener('click', function() {
infowindow.open(map, marker);
});
}
else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
}
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=API-KEY&callback=initMap">
</script>
</body>
</html>
P.S Может кому пригодится ещё добавил условия для обработки статусов:
else if (status === 'OVER_QUERY_LIMIT') {
setTimeout(() => {
codeAddress(address, geocoder, map);
}, 1);
}
else if (status === 'ZERO_RESULTS') {
console.log('STATUS ZERO BLABLABLA');
}