0

我的 map.js 文件中有一个名为 getNameOfCity() 的函数(函数如下)它是通过执行以下操作从我的 actions.js 文件中调用的,var city = getNameOfCity();然后我警告城市,它说未定义。

这是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 时会提醒。但是当我从调用函数的地方提醒 city 返回时,它返回未定义。关于为什么的任何想法?

谢谢

4

2 回答 2

1

您在匿名函数中返回一个值 - 所以您将它返回为空。

您需要做的是在您的响应返回说“我完成了,这是城市名称”时调用一个函数。

于 2012-05-07T18:29:47.970 回答
0

正如亚当所说,问题是你正在返回匿名函数。改为这样做:

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.
        }
    });
}

更新 2
您现在可以使用此函数以这种方式获取城市名称:

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