0

我一直在使用一個小型JavaScript項目,它將座標存儲在xml/kml文件中,並將它們顯示在自定義Google地圖應用程序中。除了反向地理編碼外,我已經按照我的要求工作。當我在回調函數中運行代碼時,我能夠顯示格式化的地址,但我找不到存儲地址供以後使用的方法(對於動態事件,例如當用戶單擊標記時顯示完整地址)。從反向地理編碼回調中獲取地址

有沒有辦法將地址存儲在回調函數中,然後再獲取它?每當我嘗試,它說地址是未定義的。請看下圖:

var address; 
var geocoder = new google.maps.Geocoder(); 
var latlng = new google.maps.LatLng(lat, lng); 

geocoder.geocode({'latLng': latlng}, function (results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     if (results[1]) { 
      address = results[1].formatted_address; 
      alert(address); // this displays correctly 
     } 
     else { 
      alert("No results found"); 
     } 
    } 
    else { 
     alert("Geocoder failed due to: " + status);} 
    } 
); 

alert(address); // this displays 'undefined' 

回答

1

有什麼辦法來存儲回調函數內的地址,然後把它以後呢?

是的,但問題是你沒有試圖以後得到它。你試圖立即得到它。

讓我解釋一下。正如在JavaScript中常見的那樣,geocoder.geocode異步。這意味着它做了一些工作,當工作完成時它會調用回調函數,但這裏有一個問題:它立即返回。這意味着當您在最後一行上執行alert(address)時,geocoder.geocode仍在工作,您的回調尚未被調用,並且尚未設置address

的解決方案是與address工作回調,或(對於組織的緣故),定義了您在回調中調用做後續工作的一個函數裏。

+0

謝謝@Jordan,我認爲它必須處理異步回調。我只是簡單地將'geocoder.gecode'代碼改寫成了我的'click'處理程序事件。 – Austin