Я использую navigator.geolocation.getcurrentposition, чтобы получить текущее местоположение пользователя (lat/long). Вот моя функция:Получить местоположение пользователя из навигатора в контроллере
function userLocation(){
var response = [];
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(p){
// on success
response['latitude'] = p.coords.latitude;
response['longitude'] = p.coords.longitude;
console.log(response);
}, function(e){
// on error
console.log(e);
});
} else {
console.log("Geolocation is not supported by this browser.");
}
return response;
}
Он всегда возвращает пустой массив и я понимаю, что функция getCurrentPosition делает асинхронный вызов, так что не представляется возможным вернуть ответ.
Я попытался использовать google geocode api, чтобы получить местоположение, но основанное на IP-адресе пользователя, но не так точно.
Я хочу функцию, чтобы вернуть эти lat/long. Есть ли способ получить ответ от getCurrentPosition в моей функции контроллера?
Объявление глобальной переменной '(var pos = {};) ', заполнить эту переменную и использовать' promises' для возврата значения из асинхронного вызова геолокации? – RamRaider
Функция асинхронная. Он работает в фоновом режиме, определяя позицию. Когда он преуспел (или провалился), через несколько секунд после того, как ваш код попал в ответ «return response», это означает, что анонимная функция, которую вы передали, будет устанавливать ваш response.latitude и .longitude. Вам нужно запустить право AJAX, где у вас есть 'console.log (response)' и отправить коорды на сервер, используя простой запрос GET/POST. –
@ChrisG да, это способ получить lat/long в контроллере, но что будет возвращать функция userLocation(), как заставить его ждать ответа от navigator.geolocation.getCurrentPosition()? Как я узнаю, успешно ли запрос? – manoj