function makeGoogleApiRequest($params)
{
$apiUrl = "https://maps.googleapis.com/maps/api/geocode/json";
$context = stream_context_create(['http'=>['timeout'=>5]]);
// Make request
$response = json_decode(file_get_contents($apiUrl . "?" . http_build_query($params), false, $context));
// Check response
if (
json_last_error() ||
!isset($response->status) ||
$response->status !== "OK" ||
!isset($response->results[0]->place_id) ||
!isset($response->results[0]->formatted_address) ||
!isset($response->results[0]->address_components) ||
!isset($response->results[0]->geometry->location->lat) ||
!isset($response->results[0]->geometry->location->lng)
) {
throw new \UnexpectedValueException ("Google Api Request Failed");
}
return $response;
}
/* Пример использования */
$place = makeGoogleApiRequest([
'address' => "Москва, Лаврушинский пер, 10",
'language' => "ru"
]);
var mapOptions = {
draggable: $(window).width() > 640,
//... Остальные опции
}
var city = new google.maps.LatLng(10, 10); // Переменную все же стоит сделать глобальной. И, возможно, присвоить ей какое-то значение по умолчанию
downloadUrl("getCity.php", function(data) {
var xmlCity = data.responseXML;
var cityMarkers = xmlCity.documentElement.getElementsByTagName("marker");
var latCity = parseFloat(cityMarkers[0].getAttribute("lat"));
var longCity = parseFloat(cityMarkers[0].getAttribute("lng"));
city = new google.maps.LatLng(latCity, longCity); // Изменяется значение, если данные от скрипта получены
}, false); // Указание, что запрос должен быть синхронным
function downloadUrl(url, callback, async) { // Дополнительная переменная для возможности указания синхронности
async = async || true; // Задание значения по умолчанию
var request = window.ActiveXObject ?
new ActiveXObject('Microsoft.XMLHTTP') :
new XMLHttpRequest;
request.onreadystatechange = function() {
if (request.readyState == 4) {
request.onreadystatechange = doNothing;
callback(request, request.status);
}
};
request.open('GET', url, async); // Указание синхронности запроса
request.send(null);
}
$('input[type="checkbox"]').on('change', function() {
if ($(this).prop('checked')) {
$(".appartment").off('mouseenter');
$.cookie('map-trigger-status', 'off'); // Библиотека для работы с cookies: https://github.com/carhartl/jquery-cookie
}
});