2010-04-21 4 views
0

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

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

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 - как я могу это сделать?

ответ

1

Я думаю, что проблема исходит из того, что вы делающие асинхронного 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

Спасибо - вы, конечно, помогли в этом случае! – chris

0

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

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

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); 
    } 
} 
Смежные вопросы