При запуске вашего кода alert(x)
запускается сразу. Это означает, что в браузерах, поддерживающих GeoLocation x
, еще не было возможности быть установленным, и именно поэтому вы получаете сообщение undefined
.
Способ сделать это:
var x = 0;
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition, error);
} else {
test(); // call other function or display error message
}
function showPosition(position) {
var lat = position.coords.latitude;
var lng = position.coords.longitude;
x += lat;
test();
}
function error(){
console.warn('ERROR(' + err.code + '): ' + err.message);
}
function test() {
alert(x);
}
Похоже, что вы имеете копию и вставить код из W3Schools так что вы получите undefined
ошибку, если navigator.geolocation
не true
, как x
не элемент DOM, поэтому он не имеет свойства innerHTML
.
В приведенном выше коде test();
используется для отображения всплывающего окна со значением x
. В вашем коде test();
должна быть следующая функция, которую вы хотите запустить. Например, это может быть функция, которая извлекает данные на основе текущего местоположения пользователя (если доступно).
ОБНОВЛЕНИЕ: Вот пример заполнения скрытых полей данными.
var lat = 0, lng = 0;
function showPosition(position) {
lat = position.coords.latitude;
lng = position.coords.longitude;
test();
}
Затем используйте:
HTML:
<input type="hidden" id="latInput" />
<input type="hidden" id="lngInput" />
JS:
function test(){
$("#latInput").val(lat);
$("#lngInput").val(lng);
}
// or
function test(){
$.post("your-script.php", { lat: lat, lng: png })
.done(function(data) {
// success
})
.fail(function() {
// fail
});
}
Добро пожаловать в удивительный мир ** асинхронном **! Вы не можете этого сделать. – SLaks
Чем больше я читаю ваш код, тем меньше я его понимаю. Что такое x? –
@roasted x - это просто глобальная переменная –