У меня есть сайт с каталогом предприятий, в котором есть ссылки на города, по которым пользователь может щелкнуть и найти предприятия рядом с этим городом.
До сих пор я выполнял это, просто используя переменную GET для ссылок и обрабатывая местоположение с помощью PHP и API Карт Google. К сожалению, сайт начинает генерировать более 2500 запросов в день, поэтому я решил попробовать использовать API Javascript для получения клиентской части lat / lng, когда пользователь щелкает ссылку, а затем устанавливает ее на SESSION с помощью AJAX. Я думал, что я на правильном пути, но это не работает. Кажется, что он либо не работает вообще, либо изменяет переменные 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>
Других решений пока нет …