0

我通过 HTML5 检索坐标。但是当我尝试使用 AJAX 帖子保存坐标时,没有插入任何内容。savespot.php 确实有效,所以也许它与 ajax 帖子有问题?还是在检索坐标之前运行ajax post?

<!DOCTYPE html>
<html>
    <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
    <body>
        <p id="demo">Click the button to get your position:</p>
        <button onclick="getLocation()">Get your location</button>
        <div id="mapholder"></div>
        <script src="http://maps.google.com/maps/api/js?sensor=false"></script>
        <script>
            var x=document.getElementById("demo");
            function getLocation()
            {
                if (navigator.geolocation)
                {
                    navigator.geolocation.getCurrentPosition(showPosition,showError);
                }
                else{x.innerHTML="Geolocation is not supported by this browser.";}
            }
            function showPosition(position)
            {
                lat=position.coords.latitude;
                lon=position.coords.longitude;
                latlon=new google.maps.LatLng(lat, lon)
                mapholder=document.getElementById('mapholder')
                mapholder.style.height='250px';
                mapholder.style.width='500px';
                var myOptions={
                    center:latlon,zoom:14,
                    mapTypeId:google.maps.MapTypeId.ROADMAP,
                    mapTypeControl:false,
                    navigationControlOptions:{style:google.maps.NavigationControlStyle.SMALL}
                };
                var map=new google.maps.Map(document.getElementById("mapholder"),myOptions);
                var marker=new google.maps.Marker({position:latlon,map:map,title:"You are here!"});
            }
            function showError(error)
            {
                switch(error.code)
                {
                    case error.PERMISSION_DENIED:
                        x.innerHTML="User denied the request for Geolocation."
                        break;
                    case error.POSITION_UNAVAILABLE:
                        x.innerHTML="Location information is unavailable."
                        break;
                    case error.TIMEOUT:
                        x.innerHTML="The request to get user location timed out."
                        break;
                    case error.UNKNOWN_ERROR:
                        x.innerHTML="An unknown error occurred."
                        break;
                }
            }
        </script>
        <script>
            function ajaxFunction()
            { 
                $.ajax({ 
                    url:'savespot.php', 
                    type:'POST', 
                    data:'lat='+lat+'&lon='+lng, 
                    success:function(d){ 
                        console.log(d); 
                    }, 
                    error(w,t,f){ 
                        console.log(w+' '+t+' '+f); 
                    } 
                }); 
            }
        </script>
    </body>
</html>

保存点.php

<?php

    include_once 'includes/db.php';

    //  $x = "52.364659"; 
    //  $y = "13.191007"; 
    $nick = "GPSTEST";
    $adress = "Odefinierat";

    $x = @$_POST['lat'];
    $y = @$_POST['lng'];


    $sql = 'INSERT INTO location ' .
            '(name, address, lat, lng, date) ' .
            'VALUES ("' . $nick . '", "' . $adress . '", "' . $x . '", "' . $y . '", NOW())';

    $retval = mysql_query($sql, $connection);
    if (!$retval) {
        die('Could not enter data: ' . mysql_error());
    }
    echo "Entered data successfully\n";
?>
4

4 回答 4

1

您的 AJAX 设置中有错误。

$.ajax({ 
    url:'savespot.php', 
    type:'POST', 
    data:'lat='+lat+'&lon='+lng, 
    success:function(d){ 
        console.log(d); 
    }, 
    error(w,t,f){ 
        console.log(w+' '+t+' '+f); 
    } 
});

应该给error:前面的error(w,t,f){}

    error: error(w,t,f){ 
        console.log(w+' '+t+' '+f); 
    } 
于 2012-10-04T08:44:18.227 回答
0

我找不到您打电话的地点/方式ajaxFunction,并且不知道我不能确定,但​​我最好的猜测是您在检索到位置之前发出了 Ajax 请求。

navigator.geolocation.getCurrentPosition是异步的,它会等到用户接受你的页面想要检索他们的地理位置。在他们这样做之前,该函数将不返回任何内容。处理此问题的最佳方法是在回调中发出 ajax 请求getCurrentPosition,这样您就可以在拨打电话之前确定自己拥有该职位。

在您的情况下,这意味着您ajaxFunction()从内部调用showPosition()

于 2012-10-04T08:44:39.787 回答
0

尝试像这样声明你的ajax数据:

$.ajax({ 
  url:'savespot.php', 
  type:'POST', 
  data:{
    lat:lat,
    lon:lng
  }
}); 
于 2012-10-04T08:45:32.767 回答
-2

我认为变量 lat 和 lon 应该在全局范围内声明,或者换句话说,您需要在 showPosition() 函数中声明它。

于 2012-12-05T21:31:01.873 回答