2010-07-15 86 views
-1

所以我做在JavaScript中基于谷歌地图的web应用和我的代码的一部分是这样的:Google Maps API - 为什么这不起作用?

function revGeocode(marker){ 
     var latlng = marker.position; 
     if (geocoder) { 
     geocoder.geocode({'latLng': latlng}, function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
      if (results[1]) { 
       return "GOOD"; 
      } else { 
       alert("No results found"); 
    return "BLAH1"; 
      } 
      } else { 
      alert("Geocoder failed due to: " + status); 
     return "BLAH2"; 
      } 
     }); 
     } 
    else{ 
    return "No Geocoder?!" 
    } 
    return "Weird.."; 
    } 

现在,由于某种原因,它跳过这两个IF和ELSE条件和跳跃到最终回(我刚刚添加了,看看为什么它不捕捉这两个条件)。任何人都知道这是为什么发生?

回答

1

如果我说得对,你期待发生什么......

你从匿名函数返回时的地理编码器收到来自谷歌地图API服务的积极响应,但是,从返回调用者的匿名函数(无论地理编码器对象用于将通知发送到回调函数),它不会从您的revGeocode(marker)方法返回。

因此,如果您期待在某处看到"GOOD",那不会发生。如果你在那里放置一个alert("GOOD");,那应该以明显的方式触发。目前,如果事情没有按计划进行,你只应该看到一些东西,但看起来事情必须正确解决。

之后,在调用geocoder.geocode()之后,在初始函数的代码路径中没有其他return语句,因此返回的值将是"Weird.."

希望这对我有所帮助,如果我误解了你所问的内容,请告诉我。

+0

真棒:D非常感谢你;你们两个都很棒!不能相信我犯了这样一个愚蠢的错误> _ < – MapWeb 2010-07-16 01:15:06

+0

有什么办法可以得到结果[1],所以我可以在我的代码的另一部分使用它? – MapWeb 2010-07-16 03:53:58

1

地理编码器是一个异步过程。不是在内部函数中返回“blah1或blah2”,而是调用另一个函数来执行你想要的操作。

+0

非常感谢你! – MapWeb 2010-07-16 01:14:44