Я хочу создать веб-страницу, где пользователь может ввести адрес, тогда сервер будет вычислять расстояние от входного адреса до каждого адреса, который у меня есть в базе данных MySQL. Я пытаюсь использовать метод ajax GET для этого. И у меня есть следующие коды:
<?php $query = "SELECT * FROM markers_v2 WHERE 1 LIMIT 3"; $result = mysql_query($query); $lat = $_GET['lat']; $lng = $_GET['lng']; function caldist($lat1, $lng1, $lat2, $lng2) { $R = 6371; $dLat = deg2rad($lat2 - $lat1); $dLng = deg2rad($lng2 - $lng1); $dLat1 = deg2rad($lat1); $dLat2 = deg2rad($lat2); $a = sin($dLat/2)*sin($dLat/2)+cos($dLat1)*cos($dLat1)*sin($dLng/2)*sin($dLng/2); $c = 2 * atan2(sqrt($a),sqrt(1-$a)); return $R * $c; } if(!$result) { die('invalid query: '.mysql_error()); } $jsondata = '['; while($row = @mysql_fetch_assoc($result)){ $jsondata .= '{"lat":"' . $row['lat'] . '",'; $jsondata .= '"lng":"' . $row['lng'] . '",'; $jsondata .= '"distance":"' . caldist($lat,$lng,$row['lat'],$row['lng']) .'"'; $jsondata .= '},'; } $jsondata .= ']'; ?>
Блок кодов выше работает отлично, когда я вручную вводим переменные GET через строку URL. например:
http://www.example.com/find_distance.php?lat=123456&lng=234567
Тем не менее, я хочу, чтобы входной адрес автоматически превращался в lat и lng через Geocode. Я использую коды ниже для геокода:
function searchAddress(addr) { geocoder = new google.maps.Geocoder(); geocoder.geocode({address:addr}, function(result){ loc = result[0].geometry.location; }); return loc; }
Я пытаюсь использовать метод get ajax ниже: но он не работает так, как я хотел:
var data = 'lat='+loc.lat()+'&lng='+loc.lng(); $.ajax({ url:'find_distance.php', type:'GET', data: data, cache:false, complete:function(){alert('Complete');}, success:function(){alert('success, '+data);} }); }
Кажется, это не работает. Должен ли я как-то сказать PHP-код для запуска снова в разделе кода PHP?
Попробуйте обозначить объект.
var data = {'lat':loc.lat(),'lng':loc.lng()}; $.ajax({ url:'find_distance.php', type:'GET', data: data, cache:false, complete:function(){alert('Complete');}, success:function(){alert('success, '+data);} }); }