Рассчитайте расстояние Google от входного адреса и всего адреса от сервера MySQL, используя jQuery ajax.get

описание проблемы

Я хочу создать веб-страницу, на которой пользователь может ввести адрес, тогда сервер рассчитает расстояние от входного адреса до каждого адреса, который у меня есть в базе данных 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;

    }

Я пытаюсь использовать метод получения 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?


person Chris Yeung    schedule 18.01.2012    source источник
comment
что с ним не работает? он делает hte запрос? вы можете использовать firebug, чтобы увидеть, где именно он терпит неудачу.   -  person dm03514    schedule 18.01.2012
comment
Я думаю, что мне не удалось использовать AJAX для передачи данных и обработки на одной странице. Я пытался упростить свою проблему, но я все еще не смог. Если вам интересно, взгляните на мою упрощенную проблему: Ошибка запроса AJAX POST на ту же страницу (с примером). Спасибо!   -  person Chris Yeung    schedule 18.01.2012


Ответы (1)


Попробуйте нотацию объекта

 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);}
    });
}
person Ali Nouman    schedule 18.01.2012