我通过HTML5检索坐标。但是当我尝试用AJAX帖子保存坐标时,没有插入任何内容。 savespot.php确实有效,所以也许是ajax帖子的问题? 或者在检索坐标之前运行ajax?
<!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>
savespot.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";
?>
答案 0 :(得分: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);
}
});
应该{{1}}前面的error:
。
error(w,t,f){}
答案 1 :(得分:0)
我无法找到你在ajaxFunction
调用的地点和方式,并且不知道我无法确定,但我最好的猜测是你在检索位置之前发出了Ajax请求。 / p>
navigator.geolocation.getCurrentPosition
是异步的,它将等到用户已接受您的网页想要检索其地理位置。在它们执行之前,该函数将不返回任何内容。处理此问题的最佳方法是在getCurrentPosition
的回调中生成ajax请求,这样您就可以确定自己拥有该位置,然后再拨打电话。
在您的情况下,这意味着您从ajaxFunction()
内拨打showPosition()
。
答案 2 :(得分:0)
尝试声明你这样的ajax数据:
$.ajax({
url:'savespot.php',
type:'POST',
data:{
lat:lat,
lon:lng
}
});
答案 3 :(得分:-2)
我认为变量lat和lon应该使用全局范围声明,或者换句话说,你需要将它声明为showPosition()函数。