我有一个异步方法,可以调用google maps geocoder来获取地址。它位于验证方法" LocationValidator"需要返回true或false。现在我似乎无法让它返回任何虚假的东西。看来,当"外线回调"被称为每次都返回false,即使我没有从" isResults"中返回任何内容。方法
这是我的代码
function LocationValidator(value, element, paras) {
var address = "";
var geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': value }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
address = results[0].formatted_address;
if (isResults("Inside callback", address)) {
return true;
}
} else {
return false;
}
});
isResults("Outside callback", address);
}
function isResults(where, address) {
if (address != "") {
return true;
}
}

答案 0 :(得分:0)
地理编码是异步的,因此您在返回任何响应之前都会调用isResults("Outside callback", address);
。
此时地址等于""
,这会触发您的验证错误显示。
另请注意,您声明var address
两次,由于范围,它们将是单独的变量。您应该从地理编码回调闭包中的版本中删除var
,或者根本不使用第一个版本。
目前外部变量address
永远不会改变