Вернуть значение из GEvent.addListener в Google Maps API? - PullRequest
4 голосов
/ 29 ноября 2009

Я просто пытаюсь получить расстояние от 2 точек на карте с помощью API Карт Google. Использование GDirections. Проблема в том, что после завершения функции расстояние всегда равно нулю. Я знаю, что это потому, что событие «load» вызывается только после завершения функции. Слушатель событий также не возвращает значений, поэтому я в тупике!

Кто-нибудь знает, как я могу заставить эту функцию возвращать расстояние? Возможно, есть лучший способ получить расстояние между 2 точками в Google Maps API?

function getDistance(fromAddr, toAddr) {    
var distance;
var directions;

directions = new GDirections(null, null);
directions.load("from: " + fromAddr + " to: " + toAddr);

GEvent.addListener(directions, "load", function() {
    distance = directions.getDistance().html;
    distance = distance.replace(/&.*/, '');
});

return distance; //outputs null
}

1 Ответ

2 голосов
/ 30 ноября 2009

GDirections load является асинхронным. Вы не сможете использовать результаты вашего запроса на загрузку, пока не сработает событие load . Это означает, что ваша функция getDistance просто устанавливает запрос GDirections load , она не сможет получить результаты запроса синхронно (немедленно). Объект GDIrections должен уйти и сделать HTTP-запрос в Google, чтобы он мог определить расстояние между двумя точками.

Что вам нужно сделать, так это вставить свой код, который использует расстояние, в функцию callback , которую вы передали в запрос загрузки:

GEvent.addListener(directions, "load", function() {
            // this is a callback function that is called after 
            // the getDistance function finishes.
            var distance = directions.getDistance().html;

            // Have a distance now, need to do something with it.
            doSomethingWithTheDistanceWeGotBack (distance);
    });

Вот пример использования GDirections load (получение продолжительности вождения, а не расстояния, но принцип тот же):

http://www.cannonade.net/geo.php?test=geo6

Вы можете найти источник здесь:

http://www.cannonade.net/geo6.js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...