【问题标题】:Using AJAX to insert lat/long into SESSION variables not working使用 AJAX 将 lat/long 插入 SESSION 变量不起作用
【发布时间】:2014-10-17 16:06:13
【问题描述】:

我有一个带有企业目录的网站,其中包含城市链接,用户可以点击这些链接并找到该城市附近的企业。

到目前为止,我只是在链接上使用 GET 变量并使用 PHP 和 Google Maps 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"]

?>

我添加了未设置,因为我认为每次清除它都会有所作为,但它没有

【问题讨论】:

  • 首先,永远不要将 async 设置为 false,这里有龙。请记住,AJAX 是异步的,因此在 AJAX 完成之前不会设置 SESSION 变量。你可能想使用.when() unsets 似乎没有必要。
  • 感谢您指出正确的方向,我最终使用preventDefault()success: 函数来完成我需要的工作。

标签: php jquery ajax google-maps geolocation


【解决方案1】:

我能够使用这个实现我想要的结果:

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

【讨论】:

    猜你喜欢
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2018-08-16
    • 2016-09-24
    相关资源
    最近更新 更多