函数返回函数中的方法回调数据中的变量
问题描述:
如何返回codeAddress函数的latlon变量。返回latlon不起作用,可能是因为范围,但我不确定如何使其工作。函数返回函数中的方法回调数据中的变量
function codeAddress(addr) {
if (geocoder) {
geocoder.geocode({ 'address': addr}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var latlon = results[0].geometry.location.c+","+results[0].geometry.location.b;
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
}
答
您不能从codeAddress返回geocoder.geocode的结果,因为geocoder.geocode会将其结果返回给您提供的回调/闭包。你必须继续使用一个回调作为你的函数codeAddress的参数。
返回给您geocoder.geocode回调到geocoder.geocode的任何回调在您的应用程序中都没有任何意义。您必须从您提供给geocoder.geocode的回调中调用应用程序中的某个函数。
这在API的Geocoding Requests部分进行了说明。
答
声明一个变量外功能,将其设置在内部功能和外部返回它:
function codeAddress(addr) {
var returnCode = false;
if (geocoder) {
geocoder.geocode({ 'address': addr}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var latlon = results[0].geometry.location.c+","+results[0].geometry.location.b;
returnCode = true;
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
return returnCode;
}
注意:这只会工作,如果内部函数运行的时候了!
+0
它可能无法执行,因为geocoder.geocode可能执行异步方法调用,其中返回结果的唯一方法是通过提供的回调。 – Ernelli 2010-04-14 23:08:02
谢谢我在jquery ajax回调中遇到过这么多次,并且今天没有想到。感谢大脑的提升。 – aran 2010-04-15 14:50:55