地理定位在本地工作,但不在远程服务器上

时间:2016-09-26 20:30:38

标签: javascript php jquery mysql geolocation

我将我正在处理的网络应用程序上传到远程服务器。 除地理位置外,一切都很好。我无法理解问题是什么,因为我没有收到任何错误消息。 这是涉及地理定位的HTML代码。

<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文件中获取隐藏输入的值。

2 个答案:

答案 0 :(得分: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 { 

同时检查您是否未在浏览器中为远程域禁用地理位置。添加一些控制台日志记录以查看代码中正在运行和未运行的内容

答案 1 :(得分:0)

如果您的网站以https格式运行,则还需要更改此

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

到这个

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