2010-09-20 110 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