2010-07-15 40 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

相關問題