2010-09-20 3 views
0

У меня есть функция, где мне нужно вернуть URL-адрес, который я получаю через вызов ajax.Возвращает значение из вызова ajax родительской функции

var heatmap = new google.maps.ImageMapType({ 
    getTileUrl: function(coord, zoom) { 
     var tileURL; 
     $.get('getimage.php', { zoom: zoom, x: coord.x, y: coord.y }, function(data) { 
      if(data.status) { tileURL=data.image; } 
     }, "json"); 
     return "tileURL"; 
    }, 
     tileSize: new google.maps.Size(256, 256), 
     opacity:0.55, 
     isPng: true 
}); 

Очевидно, что Ajax вызов является асинхронным, поэтому я понимаю, почему выше код будет возвращать tileURL как неопределенные. Я знаю, что в целом люди используют функции обратного вызова для решения этой проблемы, но я не знаю, как получить обратный вызов, чтобы ВОЗВРАТИТЬ значение в родительскую функцию. Я работаю с API карт google, поэтому у меня нет никакой гибкости, чтобы изменить, как это работает.

+1

См. [ Как вернуть переменную из обратного вызова геокодирования Google Maps JavaScript? ] (http://stackoverflow.com/questions/2993563/how-do-return-a-variable-from-google-maps-javascript-geocoder-callback) –

ответ

4

Поскольку запрос Ajax является асинхронным, единственным вариантом является использование обратного вызова. Если вы могли бы вернуть значение функции «parent» (действительно, «call»), тогда запрос не будет асинхронным; он блокирует вызывающую функцию. Кроме того, нет способа получить ссылку на вызывающую функцию из замыкания в этой функции. (то есть вы не можете return функции выше в стеке вызовов).

+0

Итак, вы говорите, что это невозможно сделать что я хочу, предполагая, что я не могу изменить способ работы функции getTileUrl в картах google api? Поскольку обратный вызов не помог мне вернуть значение этой функции getTileUrl. – user435281

+0

Проверьте ссылку @Matthew Flaschen выше, это поможет вам. –

Смежные вопросы