0

我有两个 Javascript 函数,它们尝试使用 Google Maps API Geocode 查找地址的纬度和经度:

function getLatLon(address) {
    var location = -1;
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var lat = results[0].geometry.location.lat();
            var lon = results[0].geometry.location.lng();
            location = new Array(lat, lon);
            //document.getElementById('results').innerHTML = location[0];
        } else {
            alert("Geocode was not successful.");
        }
    });
    return location;
}

function search() {
    var address = document.getElementById('address').value;
    var location = getLatLon(address);
    document.getElementById('results').innerHTML = location[0];
}

虽然 getLatLon() 中的 location[0] 在 #results div 中打印出正确的数字,但 search() 中的 location[0] 返回未定义。你有什么想法为什么会发生这种情况?我尝试从 getLatLon() 返回一个纯字符串(“Hello”),效果很好。

4

2 回答 2

6

问题是异步的geocoder.geocode(...)因此您无法返回值。试试这样:

function getLatLon(address, callback) {
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var lat = results[0].geometry.location.lat();
            var lon = results[0].geometry.location.lng();
            location = new Array(lat, lon);
            callback(location);
        } else {
            alert("Geocode was not successful.");
        }
    });
}

function search() {
    var address = document.getElementById('address').value;
    getLatLon(address, function(location) {
        document.getElementById('results').innerHTML = location[0];
    });
}
于 2012-11-26T04:05:13.353 回答
2

根据API 文档,调用geocoder.geocode(request, callback_function)不会立即返回任何内容。收到并处理响应后,callback_function将调用 。在此之前,location将保留您设置的任何值。

您需要在调用时在回调函数中启动搜索本身getLatLon。为了灵活性,您可以通过添加一个回调参数来执行此操作,该参数getLatLon将从geocode()回调函数中调用。

于 2012-11-26T04:06:34.827 回答