0

map.jsファイルにgetNameOfCity()という関数があります(関数は以下のとおりです)次のように実行すると、actions.jsファイルから呼び出されますvar city = getNameOfCity();。次にcityに警告すると、undefinedと表示されます。

これがmap.jsの関数です

function getNameOfCity() {
    geocoder.geocode({'latLng': map.getCenter()}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            if (results[0]){
                jQuery.each(results[0].address_components, function(key, value){
                    if(value.types[0] == 'locality') {
                        return value.long_name;
                    }
                });
            }
        } else {
            return false;
        }
    });
}

戻る直前にvalue.long_nameにアラートを送信すると、正しい都市にアラートが送信されます。しかし、関数が呼び出された場所から都市に警告すると、未定義が返されます。理由について何かアイデアはありますか?

ありがとう

4

2 に答える 2

1

匿名関数内で値を返しているので、何も返していません。

「完了しました。これが都市名です」という応答が返されたら、関数を呼び出す必要があります。

于 2012-05-07T18:29:47.970 に答える
0

Adamが言ったように、問題は無名関数に戻っていることです。代わりにこれを行います:

function getNameOfCity() {
    var city = '';
    geocoder.geocode({'latLng': map.getCenter()}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            if (results[0]){
                jQuery.each(results[0].address_components, function(key, value){
                    if(value.types[0] == 'locality') {
                        city = value.long_name;
                    }
                });
                return city;
            }
        } else {
            return false;
        }
    });
}

更新 あなたが提案されたように、コールバックの方法...

function getNameOfCity(callback) {
    geocoder.geocode({'latLng': map.getCenter()}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            if (results[0]){
                jQuery.each(results[0].address_components, function(key, value){
                    if(value.types[0] == 'locality') {
                        callback(value.long_name); // call the function, pass the city name.
                    }
                });
            }
        } else {
            callback(false); // not found? pass false instead.
        }
    });
}

UPDATE 2
この関数を使用して、次の方法で都市名を取得できるようになりました。

getNameOfCity(function(city) {
    alert(city);   // or do something less useless.
});
于 2012-05-07T18:33:12.043 に答える