我尝试按照
提供的代码将值从JavaScript发送到PHPSend date from JavaScript to PHP without using Query String
我收到错误
注意:第25行的/Applications/XAMPP/xamppfiles/htdocs/test1.php中的未定义索引:getlat
注意:未定义的索引:第26行的/Applications/XAMPP/xamppfiles/htdocs/test1.php中的getlon
任何人都可以帮我解决问题,谢谢。
我的代码是:
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
}
}
function showPosition(position) {
document.getElementById("getlat").value = position.coords.latitude;
document.getElementById("getlon").value = position.coords.longitude;
}
$( document ).ready(function() {
$.ajax({url:"test1.php",type:"POST",async:false,
data:{getlat:$("#getlat").val(),getlon:$("#getlon").val()}
});
});
</script>
</head>
<body>
<input type="hidden" id="getlat" name="getlat" />
<input type="hidden" id="getlon" name="getlon" />
<?php
$lat = $_POST["getlat"];
$lon = $_POST["getlon"];
echo $lat;
echo $lon;
?>
</body>
</html>
更新1
在评论之后我尝试了这种方式而且也没有用
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
}
}
function showPosition(position) {
document.getElementById("getlat").value = position.coords.latitude;
document.getElementById("getlon").value = position.coords.longitude;
}
</script>
</head>
<body>
<input type="hidden" id="getlat" name="getlat" />
<input type="hidden" id="getlon" name="getlon" />
<?php
$lat = $_POST["getlat"];
$lon = $_POST["getlon"];
echo $lat;
echo $lon;
?>
<script>
$( document ).ready(function() {
getLocation();
$.ajax({url:"test1.php",type:"POST",async:false,
data:{getlat:$("#getlat").val(),getlon:$("#getlon").val()}
});
});
</script>
</body>
</html>
答案 0 :(得分:1)
你有三个不同且严重的问题。
getLocation
用数据填充输入元素的函数永远不会被调用。你必须打电话给它。
将getLocation()
放入ready
事件处理程序。
getCurrentPosition
是异步的在启动Ajax请求时,您无法确定它是否已完成运行(并使用数据填充输入元素)。
您需要将调用转移到$.ajax
的回调函数中的getLocation
。即在此行之后:document.getElementById("getlon").value = position.coords.longitude;
您要求test1.php
两次。
首先,您可以在浏览器的地址栏中输入地址来申请。 (所以$_POST["getlat"];
)将不会被设置。)
然后,作为加载它的一部分,您使用JavaScript再次请求它(这次使用一些数据)......但您没有对响应做任何事情。
Ajax不会重写您当前的请求(因为该请求已经被响应,因为它已经太迟了),它将创建一个新的请求。
您需要将最后的PHP块移动到另一个文件中,并使用$.ajax
中的URL。然后你需要在ajax选项中添加一个success
函数,并使用它来对你得到的响应做一些事情。
答案 1 :(得分:0)
您需要先在 document.ready()回调中调用 getLocation()。 之后,在 getCurrrentPosition()调用的回调中执行ajax请求。
这应该可以胜任。