2014-10-17 80 views
0

我有一個網站,其中有一個企業目錄,其中包含城市鏈接,用戶可以點擊並查找該城市附近的企業。使用AJAX插入經緯度變量不起作用的經緯度

到目前爲止,我已經完成了這一工作,只需在鏈接上使用GET變量並使用PHP和Google Maps API處理位置即可。不幸的是,該網站每天開始生成超過2500條查詢,所以我決定嘗試使用Javascript API來檢索經緯度/客戶端,當用戶點擊鏈接,然後使用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"] 

?> 

我加入了取消設置,因爲我認爲它清除每次會有所作爲,但它沒有

+1

首先,不要將異步設置爲false,*這裏有龍*。請記住,AJAX是異步的,所以在完成AJAX之前,SESSION變量不會被設置。你可能想使用['.when()'](http://api.jquery.com/jquery.when/)'unsets'似乎沒有必要。 – 2014-10-17 16:10:47

+1

感謝您指出正確的方向,我最終使用'preventDefault()'和'success:'來完成我所需要的功能。 – Muskogeee 2014-10-17 16:45:19

回答

0

我能夠實現我想要的結果使用此:

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