#jquery #geolocation
#jquery #геолокация
Вопрос:
У меня есть обработчик событий, привязанный к переключателю формы
$("#formSwitch").on('change', function() {
var geoOptions = {
maximumAge: 5 * 60 * 1000,
}
var geoSuccess = function(position) {
/***** do some stuff here ****/
return ( true );
};
var geoError = function(error) {
/***** do some stuff here ****/
return ( false );
};
var status = navigator.geolocation.getCurrentPosition(geoSuccess, geoError, geoOptions);
console.log(status); /******** Geolocation works but gives undefined here ******/
return(status);
});
И я хочу как активировать переключатель, так и определить статус геолокации, поэтому я попытался:
if( !$("#formSwitch").val("on").change() ) {
/****** geoLocation is false so do some stuff here ******/
}
Это запускает переключатель, вызывает функцию геолокации нормально, но не получает возвращаемое значение.
Ответ №1:
Возможно, вам следует проверить, поддерживает ли браузер геолокацию: if (navigator.geolocation !== undefined){/* do geolocation stuff here */}
Некоторые браузеры начали блокировать геолокацию при определенных условиях при разработке loca, и, возможно, в вашем браузере происходит сбой: https://developers.google.com/web/updates/2016/04/geolocation-on-secure-contexts-only#does_this_affect_local_development
Кроме того, поскольку обратные вызовы геолокации являются асинхронными, возможно, было бы лучше размещать журналы консоли внутри обратных вызовов geoSuccess и geoError. Возможно, что консоль.журнал оценивается до того, как getCurrentPosition вернет что-либо.
Попробуйте добавить код, зависящий от успешных / неудачных обратных вызовов, в сами обратные вызовы:
var geoOptions = {
maximumAge: 5 * 60 * 1000,
}
var geoSuccess = function(position) {
/***** do some stuff here ****/
console.log(true);
};
var geoError = function(error) {
/***** do some stuff here ****/
console.log(false);
};
var status = navigator.geolocation.getCurrentPosition(geoSuccess, geoError, geoOptions);
Комментарии:
1. Нет navigator.geolocation возвращает true.
2. И geoSuccess и geoError передаются как функции обратного вызова, чтобы гарантировать, что они выполняются после завершения запроса.
3. Верно, но ваш код продолжает выполняться после вызова getCurrentPosition . Он не ожидает разрешения обратных вызовов, прежде чем перейти к следующей строке кода, поэтому статус не определен, пока не разрешится один из обратных вызовов. Вот почему консоль. журнал не определен.