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.geocodeaを記述できませんgetLatLng。代わりに、コールバック関数を引数として渡し、ジオコード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 に答える