2016-08-11 2 views
2

Я пытаюсь использовать геолокацию, предоставляемую браузером.Геолокация поддерживается, но не работает

Это мой код

console.log("Before Geolocation"); 

     if(navigator.geolocation) { 
     console.log("Geolocation Supported"); 
      navigator.geolocation.getCurrentPosition(function(position) { 
       console.log("Within function"); 
       geoloc = position.coords.latitude + "," + position.coords.longitude; 
       console.log(geoloc);      
       }, 
      function(){ 
       console.log("error"); 
      }, 
      { 
       timeout: 10000 
      } 
      ); 

     } 
     else { 
      console.log("geolocation not supported"); 
     } 


     if (geoloc != '') { 
      addition = geoloc; 

     } 

     else { 

     addition = "DEFAULT LOCATION"; 

     } 

     console.log(addition); 

Моя проблема, когда им выполнение кода, выход консоли на хром говорит:

Before Geolocation 
Geolocation Supported 
DEFAULT LOCATION 

Похоже, что призыв:

navigator.geolocation.getCurrentPosition(function(position) { 

, похоже, не выполнен, так как ни успех, ни функция отказа ничего не делают. (Что можно было проверить на консоли)

В чем могут быть причины, по которым функция не срабатывает, но поддерживается геолокация?

+0

Какова ваша среда тестирования? Вы тестируете локально? –

+0

Нет на сервере – Tom

+2

Это SSL (https)? Chrome не разрешает доступ к API геолокации на сайтах без SSL. –

ответ

2

Функция вызывается, но она асинхронна. Вот почему вы должны предоставить функцию обратного вызова.

var addition = "DEFAULT LOCATION"; 
 
var options = { 
 
    enableHighAccuracy: true, 
 
    timeout: 5000, 
 
    maximumAge: 0 
 
}; 
 

 
if (navigator.geolocation) { 
 
    console.log('geolocation supported'); 
 
    navigator.geolocation.getCurrentPosition(success, error, options); 
 
} else { 
 
    console.log("geolocation not supported"); 
 
    console.log(addition); 
 
} 
 

 
function success(position) { 
 
    addition = position.coords.latitude + "," + position.coords.longitude; 
 
    console.log(addition); 
 

 
    // I worked! Party on... 
 
} 
 

 
function error(err) { 
 
    console.error(err.message); 
 
}

+0

Спасибо за вашу помощь. Однако я пробовал ваш подход, и он не работал: | – Tom

+0

Каким образом вы чувствуете, что это провал? Я могу нажать кнопку «Выполнить фрагмент кода» и увидеть, как она работает. – Will

+0

он ничего не выводит в функции успеха, это тот же результат, что и выше – Tom

Смежные вопросы