2016-09-26 3 views
1

Я загрузил веб-приложение, над которым я работаю на удаленном сервере. Все работает хорошо, за исключением геолокации. Я не могу понять, в чем проблема, но я не получил сообщение об ошибке. это код HTML, в котором участвует геолокация.Geolocation работает локально, но не на удаленном сервере

<tr> 
<td>Ti trovi qui: <span id="location"></span></td> 
</tr> 
</table> 
<input type="hidden" id="latitude" name="latitude"> 
<input type="hidden" id="longitude" name="longitude"> 
</form> 

Эти скрипты, которые я использую: (я не очень готов с Javascript и JQuery)

function showLocation(position) { 
var latitude = position.coords.latitude; 
var longitude = position.coords.longitude; 
jQuery.ajax({ 
    type:'POST', 
    url:'getLocation.php', 
    data:'latitude='+latitude+'&longitude='+longitude, 
    success:function(msg){ 
     if(msg){ 
      jQuery("#location").html(msg); 
     }else{ 
      jQuery("#location").html('Not Available'); 
     } 
    } 
}); 
} 

function getUserCoordinates(position){ 

var latitude = position.coords.latitude; 
var longitude = position.coords.longitude; 
document.getElementById('latitude').value=latitude 
document.getElementById('longitude').value=longitude 

} 

jQuery(document).ready(function(){ 
if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(getUserCoordinates); 
    navigator.geolocation.getCurrentPosition(showLocation); 
} else { 
    jQuery('#location').html('Geolocation is not supported by this browser.'); 
} 
}); 

Это getLocation.php файл (но я не думаю, что это проблема):

<?php 

require_once 'metodi.php'; 

sec_session_start(); 

if(login_check() == true){ 
if(!empty($_POST['latitude']) && !empty($_POST['longitude'])){ 

    $_SESSION['latitude'] = $_POST['latitude']; 
    $_SESSION['longitude'] = $_POST['longitude']; 
    //Send request and receive json data by latitude and longitude 
    $url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.trim($_POST['latitude']).','.trim($_POST['longitude']).'&sensor=false'; 
    $json = @file_get_contents($url); 
    $data = json_decode($json); 
    $status = $data->status; 
    if($status=="OK"){ 
     //Get address from json data 
     $location = $data->results[0]->formatted_address; 
    }else{ 
     $location = ''; 
    } 
    //Print address 
    echo $location; 
} 
} else { 
    echo "Non sei autorizzato a visualizzare questa pagina. Effettua il login."; 
} 

?> 

Затем я получаю значение скрытых входов в другом файле php.

+0

ничего в поле возвращаемого статуса? 'echo $ status' – nogad

+0

Я просто добавил эти строки кода, и он начинает работать ... Я не знаю, почему xD ' navigator.geolocation.getCurrentPosition (getUserCoordinates, geoError); функция geoError (ошибка) { console.log (error.code); } ' Но я хотел бы понять .. Вы можете мне объяснить? – seb

+0

не имеет для меня большого смысла. он может быть временно недоступен. – nogad

ответ

0

getCurrentPosition() является асинхронным. Когда вы вызываете его дважды, нет гарантии, что первый вызов будет завершен до второго. Он также не имеет смысла называть его дважды спиной к спине

Также он полагается на службе третьей стороны, чтобы вернуть данные

только называем это один раз, и передать значение ответа на оба ваши функции внутри одного обратного вызова

Изменить

if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(getUserCoordinates); 
    navigator.geolocation.getCurrentPosition(showLocation); 
} else { 

Для

if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function(position){ 
     getUserCoordinates(position); 
     showLocation(position); 
    }); 

} else { 

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

+0

Хорошо, спасибо .. Я открыл консоль хром и дал мне это сообщение об ошибке: 'getCurrentPosition() и watchPosition() больше не работают с небезопасным происхождением. Чтобы использовать эту функцию, вам следует переключить приложение в безопасное происхождение, например HTTPS. Дополнительную информацию см. В [link] (https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins). Итак, я думаю я нашел проблему ... II сделаю этот переключатель, и я обновлю вас .. – seb

0

Если ваш сайт работает в HTTPS, необходимо также изменить

http://maps.googleapis.com/maps/api/geocode/json?latlng= 

к этому

https://maps.googleapis.com/maps/api/geocode/json?latlng= 
Смежные вопросы