2010-09-20 43 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返回爲undefined。我知道一般人們使用回調函數來解決這個問題,但是我不知道如何調用回調函數返回一個值。我正在使用谷歌地圖API,所以我沒有任何靈活性來改變它的工作方式。

+1

請參閱[ 如何從Google Maps JavaScript geocoder回調中返回變量? ](http://stackoverflow.com/questions/2993563/how-do-i-return-a-variable-from-google-maps-javascript-geocoder-callback) – 2010-09-20 22:39:12

回答

4

由於Ajax請求是異步的,您唯一的選擇是使用回調。如果您可以將值返回給「父」(真正的「調用」)函數,那麼請求將不會異步;它會阻止調用函數。而且,沒有辦法從該函數的閉包中獲取對調用函數的引用。 (即,你不能將return設置爲調用堆棧中更高的功能)。

+0

那麼,你是說它不可能做到我想要什麼,假設我無法改變getTileUrl函數在Google Maps API中的工作方式?因爲回調不會幫助我將值返回給getTileUrl函數。 – user435281 2010-09-20 22:58:31

+0

查看上面貼出的@Matthew Flaschen鏈接,它會幫助你。 – 2010-09-20 23:02:00

相關問題