2014-07-13 149 views
0

相當新的JavaScript和試圖使一個簡單的地圖應用程序。我正在嘗試圍繞通過函數傳遞的地址居中一個新地圖。我遇到的問題是它總是被返回null,我不明白,我是否必須在函數格式中指定返回類型?谷歌地圖API - results.geometry.location [0]返回null

我的代碼:

<script> 

var geocoder; 
var map; 
function initialize() { 
    var address = document.getElementById('address').value; 
    var latlng = GetLatLong(address); 
    alert(latlng); 
    var mapOptions = { 
    zoom: 8, 
    center: latlng 
    } 
    var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
} 

function GetLatLong(address) { 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 'address': address}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
    alert(results[0].geometry.location) 
    return results[0].geometry.location; 
    } else { 
    alert('Geocode was not successful for the following reason: ' + status); 
    } 
}); 
} 

google.maps.event.addDomListener(window, 'load', initialize); 

</script> 

我有地址文本股利以及地圖位置的股利。爲了調試我在某些地方放置alert(「」)以查看它在運行時被調用的順序,爲什麼在調用該函數之前調用了第一條警報的行?

謝謝

回答

3

您正在執行的Google地圖API調用是異步的。通俗地說,這意味着只要你開始通話,程序的其餘部分就會獨立執行。它本質上是跑到你的程序的其餘部分。傳遞給geocoder調用的函數的目的是處理異步調用返回的數據。

你需要改變你的代碼,做這樣的事情:

function initialize() { 
    var address = document.getElementById('address').value; 
    GetLatLong(address); 
} 

var map; 
function GetLatLong(address) { 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 'address': address}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
    alert(results[0].geometry.location) 
    var latlng = results[0].geometry.location; 
    var mapOptions = { 
     zoom: 8, 
     center: latlng 
    }; 
    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
    } else { 
    alert('Geocode was not successful for the following reason: ' + status); 
    } 
}); 
} 
+0

有道理,謝謝你,我給它一個去,然後標記後,爲正確 – asdf