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

我在另一个函数中使用这个 javascript 函数从作为地址的字符串中获取纬度/经度值。警报显示转换成功,但如果我调用该方法,我会收到一个 JavaScript 错误,它仍然未定义。

    var start = document.getElementById("route_start").value;
    start = getLatLng(start);
    alert("Start: "+start);

我错过了什么?警报始终显示未定义的变量。这是为什么?我什么都试过了。一切都很顺利,直到我调用函数 getLatLng。有回报的东西不起作用。:(

4

1 回答 1

2

您的getLatLng函数实际上并没有返回任何内容,这就是start未定义的原因。

您编写的 return 语句包含在传递给 的匿名函数中geocoder.geocode,因此它实际上不会从您的外部函数返回。

由于geocoder.geocode是异步的,您将无法编写以getLatLng这种方式返回结果的 a,而是需要将回调函数作为参数传递,并在地理编码 API 返回值时调用此函数,例如:

function getLatLng(address, callback) {
    geocoder.geocode({
        'address' : address
    }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            callback(results[0].geometry.location);
        } else {
            alert("Geocode was not successful for the following reason: "
                    + status);
        }
    });
}
于 2012-09-10T08:11:10.623 回答