2011-07-21 84 views
3

我使用谷歌地圖地理編碼器來對郵編進行地理編碼,我希望它能夠返回郵政編碼所在的狀態並將其存儲在變量「local」中。我收到一個錯誤,指出本地是未定義的。爲什麼?谷歌地圖地理編碼器返回狀態

見下面的代碼:

var address=document.getElementById("address").value; 
var radius=document.getElementById("radius").value; 
var latitude=40; 
var longitude=0; 
var local; 
geocoder.geocode({ 'address': address}, function(results, status){ 
if (status==google.maps.GeocoderStatus.OK){ 
latlng=(results[0].geometry.location); 
latitude=latlng.lat(); 
longitude=latlng.lng(); 
//store the state abbreviation in the variable local 
local=results[0].address_components.types.adminstrative_area_level_1; 
} 

else{ 
    alert("Geocode was not successful for the following reason: " + status); 
} 
}); 

回答

5

我覺得這個問題實際上是address_components將可能有一個以上的組件,以及訂單未必是所有郵政編碼相同。所以你必須遍歷結果找到正確的結果。

<html xmlns="http://www.w3.org/1999/xhtml"> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript"> 
var geocoder = new google.maps.Geocoder(); 
function test() 
{ 
    var address=document.getElementById("address").value; 
    var local = document.getElementById("local"); 
    var latitude=40; 
    var longitude=0; 
    geocoder.geocode({ 'address': address}, function(results, status) 
    { 
     if (status==google.maps.GeocoderStatus.OK) 
     { 
      latlng=(results[0].geometry.location); 
      latitude=latlng.lat(); 
      longitude=latlng.lng(); 
      //store the state abbreviation in the variable local 
      for(var ix=0; ix< results[0].address_components.length; ix++) 
      { 
       if (results[0].address_components[ix].types[0] == "administrative_area_level_1") 
       { 
        local.value=results[0].address_components[ix].short_name; 
       } 
      } 
     } 
     else 
     { 
      alert("Geocode was not successful for the following reason: " + status); 
     } 
    }); 
} 
</script> 
</head> 
<body> 
    <input type='text' id='address' value='84102' /> 
    <input type='text' id='local' value='' /> 
    <a href='#' onclick="test();" >try</a> 
</body> 
</html> 
0

哪裏檢查變量的值local?我在你的代碼示例中沒有看到它。

如果退出回調函數,那麼沒有什麼奇怪的。請求地理編碼器異步運行。所以即使運行請求後,它也可能是未定義的。您需要將代碼與變量local一起使用回調函數。