このコードのどこが悪いのかわかりません:
function getLocationName(latitude, longitude) {
if (isNaN(parseFloat(latitude)) || isNaN(parseFloat(longitude))) {
return false;
}
var locationName;
var geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(latitude, longitude)
// Reverse Geocoding using google maps api.
geocoder.geocode({ 'latLng': latlng }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
locationName = results[1].formatted_address;
alert(locationName);
}
else {
locationName = "Unknown";
}
}
else {
locationName = "Couldn't find location. Error code: " + status;
}
});
alert(locationName);
return locationName;
}
これを jquery イベント ハンドラから次のように呼び出します。
$("#id").on("event", function (event, ui) {
$("#userLocation").text(getLocationName(latitude, longitude));
});
奇妙な部分は、最初のアラートが「locationName」の正しい値を取得するのに、2 番目のアラートが常に「undefined」を返すことです。変数を値で初期化しようとしましたが、その場合、最初のアラートは正しい場所の名前を返しましたが、2 番目のアラートは初期化値を返しました。これは、これが変数スコープに関連する問題である可能性があるという考えを私に与えますが、私は何を理解することはできません.
PS。同じ名前の他の変数 (ローカル/グローバル) はありません。
更新: アラートは正常に機能するようになりました (Lwyrn の回答のおかげです) が、戻り値はまだ間違っています。リンクされたSOの質問の回答に従いましたが、正しい値を「返す」ことができませんでした。アラートは正常に機能しました。