2012-05-07 41 views
0

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

这里是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就在我返回正确的城市惊动了作用。但是当我从该函数被调用的位置提醒城市时,它将返回undefined。任何想法为什么?

谢谢

+0

你想返回值.long_name作为城市?询问因为,我没有与地图工作......但如果你想要返回,我知道问题出在哪里 –

+0

地理编码器将value.long_name中的城市名称。我想返回结果,例如“伦敦”返回到函数,所以如果我调用函数如test = getNameOfCity();测试将包含值“伦敦” –

回答

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

UPDATE 回调的方式,为你建议...

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

感谢您的例子。我已经复制并粘贴上面的代码,它仍然返回undefined。 –

+0

仍未定义: -/ –

+0

还有其他想法吗?环顾很多人建议使用回调(城市);我将如何做到这一点? –

1

你正在返回一个匿名函数内的值 - 所以你没有返回它。

你需要做的是当你的回答回复说:“我完成了,这是城市的名字”时调用一个函数。

+0

啊,我现在看到:-)我如何修改上面的功能来做到这一点。感谢您的注意 –