2011-11-14 41 views
1

我想使用谷歌地圖地理編碼將此地址字符串轉換爲LatLng對象。我相信因爲這是一個異步調用,所以latlng被賦值爲null。我能做些什麼來使變量賦值以我想要的方式工作?如何將此地理編碼請求分配給變量?

var latlng = codeAddress(address) 
alert("Lat/lng is: " + latlng); 

function codeAddress(address) { 
     geocoder.geocode({'address':address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      return results[0].geometry.location; 
     } else { 
      alert("Geocode failed due to: " + status); 
     } 
     }); 
    } 

回答

3

由於geocode()是異步的,因爲您還提到,無法同步調用它。所以,var latlng = codeAddress(address);不可能。您需要在函數本身內部使用地理編碼的結果。試想一下:

var latlng = null; 
function codeAddress(address) { 
     geocoder.geocode({'address':address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      latlng = results[0].geometry.location; // use latlng here ..., e.g.: 
      alert("Lat/lng is: " + latlng); 
     } else { 
      alert("Geocode failed due to: " + status); 
     } 
     }); 
    } 

呼叫codeAddress(address)分配給全局變量latlng。但是,問題是您不知道分配何時發生。在上述情況下,只有在警告框出現後纔會知道。

一般的方法是在回調中處理地理編碼的結果,例如,使用結果來填充HTML字段。

+0

感謝您的回覆。我想要做的是渲染一個谷歌地圖,如果狀態代碼是成功的,否則,我不會渲染地圖。有沒有辦法讓一個JavaScript函數/任務塊,直到另一個完成?或者也許我需要以不同的方式去做這件事? –

+1

您可以在地理編碼回調中調用您的函數,而不是'alert(latlng)'調用您的'render(latlng)'。 – Jiri

+0

3年後,這仍然是有效的答案。謝謝 ! – Kaloyan

相關問題