Я использую navigator.geolocation.getcurrentposition, чтобы получить местоположение текущего пользователя (широта / долгота). Вот моя функция:
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 в моей функции контроллера?
Место getLocation()
Функция в окне загрузки, и одно всплывающее окно попросит разрешить ваше местоположение, и если вы разрешите, широта и долгота будут получены.
Пожалуйста, используйте код ниже.
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
console.log("Geolocation is not supported by this browser.");
}
}
function showPosition(position) {
console.log("Latitude: " + position.coords.latitude +
"<br>Longitude: " + position.coords.longitude);
$.ajax({
url: 'abc.php',
type: 'POST',
data: 'latitude='+position.coords.latitude+'&longitude='+position.coords.longitude,
success: function(data) {
console.log(data);
},
error: function(e) {
//called when there is an error
//console.log(e.message);
}
});
}
Пожалуйста, обратитесь по этой ссылке, чтобы получить больше идей http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_geolocation
Вот как можно сделать что-то с результатом:
function userLocation(cb) {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(p){
// on success
cb(null, p.coords);
}, function(e){
// on error
cb(e, null);
});
} else {
cb("Geolocation is not supported by this browser.", null);
}
}
Теперь вызовите функцию так:
userLocation(function(err, coords) {
if (err) console.log(err);
else {
// do something with coords
}
});
Вы можете использовать третий параметр getCurrentPosition
,
Пожалуйста, обратитесь к следующему примеру.
var response = [];
var options = {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
};
function success(pos) {
response['latitude'] = pos.coords.latitude;
response['longitude'] = pos.coords.longitude;
};
function error(err) {
//
};
navigator.geolocation.getCurrentPosition(success, error, options);
Вы также можете обратиться по следующей ссылке.
https://www.tutorialspoint.com/html5/geolocation_getcurrentposition.htm
Попробуйте выдвинуть текущие значения позиций, используя response.push()
var response = [];
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(p){
response.push(p.coords.latitude, p.coords.longitude);
console.log(response);
});
} else {
console.log("Geolocation is not supported by this browser.");
}