我正在尝试构建一个简单的移动应用程序来检查数据库,并根据用户的位置为用户提供正确的场所。基本上,我有两个文件:一个用geolocation
,JavaScript和AJAX调用,另一个用php检查数据库并发回正确的结果。它本身的一切工作都非常好,但当我尝试将geolocation
坐标发送给PHP时,它返回undefined
。为什么它没有拿起坐标(它们会弹出一个单独的窗口)?我该如何解决?
这是我的geolocation
和AJAX代码:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
$( document ).ready(function() {
var latitude;
var longitude;
if (navigator.geolocation) {
var timeoutVal = 10 * 1000 * 1000;
navigator.geolocation.getCurrentPosition(
displayPosition,
displayError,
{ enableHighAccuracy: true, timeout: timeoutVal, maximumAge: 0 }
);
}
else {
alert("Geolocation is not supported by this browser");
}
function displayPosition(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
alert("Latitude: " + position.coords.latitude + ", Longitude: " + position.coords.longitude);
}
function displayError(error) {
var errors = {
1: 'Permission denied',
2: 'Position unavailable',
3: 'Request timeout'
};
alert("Error: " + errors[error.code]);
}
var request = $.ajax({
url: "http://cs11ks.icsnewmedia.net/mobilemedia/ajax.php?latitude=" + latitude + "&longitude=" + longitude,
type: "GET",
dataType: "html"
});
request.done(function(msg) {
$("#ajax").html(msg);
});
request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});
});
</script>
以下是处理这些变量的PHP:
if (isset($_GET['latitude']) && isset($_GET['longitude'])) {
$latitude = $_GET['latitude'];
$longitude = $_GET['longitude'];
echo "Geolocation seems to work...";
echo $latitude;
echo $longitude;
//continue here
}else{
echo "Hello. I am your geolocation and I am not working.";
}
我得到的是“地理定位似乎有效......未定义的定义”
答案 0 :(得分:1)
Geolocation API是异步的,因此您必须等待结果返回
function displayPosition(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
$.ajax({
url : "http://cs11ks.icsnewmedia.net/mobilemedia/ajax.php",
data : {latitude : latitude, longitude : longitude},
type : "GET",
dataType : "html"
}).done(function(msg) {
$("#ajax").html(msg);
}).fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});
}
答案 1 :(得分:0)
function displayPosition(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
alert("Latitude: " + position.coords.latitude + ", Longitude: " + position.coords.longitude);
}
删除两个变量中的var。这两个在displayPosition外部不可见。当您使用$ .ajax调用时,您使用的是在$(document).raedy()下声明的纬度和经度,但您从未向它们分配任何内容,因此它们未定义。 希望这能解决你的问题。
P.S。您可以查看警报中的值,因为您使用的是位置而不是变量。
答案 2 :(得分:-1)
不要在displayPosition函数中使用var。您不希望在函数范围内声明新变量,您希望为先前在全局范围中声明的现有变量赋值。