使用AJAX将值从JS发送到PHP

时间:2014-08-24 07:59:49

标签: javascript php jquery html ajax

我尝试按照

提供的代码将值从JavaScript发送到PHP

Send 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>

2 个答案:

答案 0 :(得分:1)

你有三个不同且严重的问题。

您永远不会致电getLocation

用数据填充输入元素的函数永远不会被调用。你必须打电话给它。

getLocation()放入ready事件处理程序。

getCurrentPosition是异步的

在启动Ajax请求时,您无法确定它是否已完成运行(并使用数据填充输入元素)。

您需要将调用转移到$.ajax的回调函数中的getLocation。即在此行之后:document.getElementById("getlon").value = position.coords.longitude;

Ajax是一个不同的请求

您要求test1.php两次。

首先,您可以在浏览器的地址栏中输入地址来申请。 (所以$_POST["getlat"];)将不会被设置。)

然后,作为加载它的一部分,您使用JavaScript再次请求它(这次使用一些数据)......但您没有对响应做任何事情。

Ajax不会重写您当前的请求(因为该请求已经被响应,因为它已经太迟了),它将创建一个新的请求。

您需要将最后的PHP块移动到另一个文件中,并使用$.ajax中的URL。然后你需要在ajax选项中添加一个success函数,并使用它来对你得到的响应做一些事情。

答案 1 :(得分:0)

您需要先在 document.ready()回调中调用 getLocation()。 之后,在 getCurrrentPosition()调用的回调中执行ajax请求。

这应该可以胜任。