使用AJAX将lat/long插入SESSION变量不起作用


Using AJAX to insert lat/long into SESSION variables not working

我有一个网站,它有一个企业目录,其中有城市链接,用户可以点击并查找该城市附近的企业。

到目前为止,我只需在链接上使用GET变量并使用PHP和GoogleMapsneneneba API处理位置就可以完成这项工作。不幸的是,该网站开始每天生成2500多个查询,因此我决定尝试使用Javascript API在用户单击链接时检索lat/lng客户端,然后使用AJAX将其设置为SESSION。我以为我走在了正确的轨道上,但它不起作用。它似乎要么根本不起作用,要么只是在多次单击链接后更改SESSION变量。我以为设置async:false会解决它,但它没有

有什么想法吗?

这是我的测试页面:

<?php
session_start();
require_once('../includes/header.php');
echo $_SESSION["address"] . "<br>";
echo $_SESSION["lat"] . "<br>";
echo $_SESSION["lng"] . "<br>";
?>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js"></script>
<a href="test.php" id="Orlando" class="loc">Orlando</a><br /><br />
<a href="test.php" id="Tampa" class="loc">Tampa</a><br /><br />
<a href="test.php" id="Daytona" class="loc">Daytona</a><br /><br />

<script type="text/javascript">
function setLoc(lat,lng,address){
    $.ajax({
        async: false,
        type: 'POST',
        url: 'setLoc.php',
        data: {lat: lat,lng: lng,address: address}
        });
}
$('.loc').each(function() {
    $(this).click(function() {
        var address = $(this).attr('id');
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( { 'address': address+'FL'}, function(results, status) {
        var location = results[0].geometry.location;
        lat=location.lat();
        lng=location.lng();
        setLoc(lat,lng,address);
        });
    });
});
</script>
<?php 
require_once('../includes/footer.php');
?>

这是setLoc.php文件:

<?php
session_start();
unset($_SESSION["address"]);
unset($_SESSION["lat"]);
unset($_SESSION["lng"]);
$_SESSION["lat"] = $_POST["lat"];
$_SESSION["lng"] = $_POST["lng"];
$_SESSION["address"] = $_POST["address"]
?>

我添加了unsets,因为我认为每次清除它都会有所不同,但它没有

我能够使用以下方法实现我想要的结果:

<script type="text/javascript">
function setLoc(lat,lng,address,href){
    $.ajax({
        type: 'POST',
        url: 'setLoc.php',
        data: {lat: lat,lng: lng,address: address},
        success: function(){
            location.href=href;
        }
        });
}
$('.loc').each(function() {
    $(this).click(function(e) {
        var href=$(this).attr('href');
        e.preventDefault();
        var address = $(this).attr('id');
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( { 'address': address+'FL'}, function(results, status) {
        var location = results[0].geometry.location;
        var lat=location.lat();
        var lng=location.lng();
        setLoc(lat,lng,address,href);
        });
    });
});
</script>