Как сделать обратный вызов jquery при нажатии на маркер карты Google? - PullRequest
0 голосов
/ 21 апреля 2010

Я размещаю несколько маркеров на карте. Когда пользователь нажимает на одну из них, я хотел бы сделать обратный вызов, чтобы получить некоторую информацию и отобразить ее во всплывающем окне.

Мой код для размещения маркеров на карте работает и выглядит так:

GEvent.addListener(marker, "click", function() {
  html = getDetails(id);
  marker.openInfoWindowHtml(html);
});

Моя функция getDetails:

  function getDetails(did) {
    var desc;
    desc = "Nothing here";
    var path = '/path/GetDetails';
    $.post(path, {id:did}, function(data, status) {
      desc = data
    });
    return desc;
  }

GetDetails вызывается, получает правильное значение и возвращает правильную вещь, но мне кажется, что мне не хватает способа получить эти данные из функции обратного вызова в мой локальный var - как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 21 апреля 2010

Я думаю, что проблема в том, что вы делаете асинхронный вызов Ajax, и поэтому getDetails возвращает значение до того, как вызов Ajax вернется. Я бы попытался изменить метод getDetails, чтобы изменить значение маркера, а не возвращать значение:

function getDetails(did, marker) {
  var path = '/path/GetDetails';
  $.post(path, {id:did}, function(data, status) {
    marker.openInfoWindowHtml(data);
  });
}

Затем изменив прослушиватель событий:

GEvent.addListener(marker, "click", function() {
  getDetails(id, marker);
});
0 голосов
/ 21 апреля 2010

Ваш вызов метода .post асинхронный и возвращается немедленно, переменная desc по-прежнему не имеет возвращаемого значения.

Вы должны перейти на использование $ .ajax (), чтобы вы могли указать синхронный вызов, ИЛИ вам следует передать ссылку на метод openInfoWindowHtml в функцию getDetails, чтобы результаты можно было отправлять вместе, ala:

GEvent.addListener(marker, "click", function() { 
    getDetails(id, marker.openInfoWindowHtml);
});

function getDetails(did, fInfoWindowMethod) {
    var path = '/path/GetDetails';
    $.post(path, {id:did}, function(data, status) {
        fInfoWindowMethod(data);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...