JavaScript — получить местоположение пользователя из навигатора в контроллере

Я использую 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 в моей функции контроллера?

0

Решение

Место 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

1

Другие решения

Вот как можно сделать что-то с результатом:

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
}
});
1

Вы можете использовать третий параметр 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

0

Попробуйте выдвинуть текущие значения позиций, используя 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.");
}
-2
По вопросам рекламы [email protected]