0

我在我的 Facebook 注册插件中使用了一个自定义字段,并且需要验证一个返回布尔值的邮政编码字段,不知何故因为这个内部函数:

    geocoder.geocode({ address: address }, function (results, status) {
}

我无法向我的 addExist 变量返回值,它总是返回“未定义”。任何人都可以帮忙吗?谢谢。

<fb:registration redirect_uri="http://localhost:40153/Account/RegisterDestination.aspx" 
     fields='[
       {"name":"name"},
       {"name":"gender"},
       {"name":"email"},
       {"name":"birthday"},
       {"name":"password"},
       {"name":"zip","description":"Postal Code","type":"text"}]'
       onvalidate="validate"></fb:registration>

       function validate(form) {
            errors = {};
            if (form.zip !== "") {

                var addExist = calculateCoordinates(form.zip.toString());
                // alert(addExist); 
                if (!addExist) {
                    errors.zip = "Cannot locate address";
                }
            }
            return errors;
        }

        function calculateCoordinates(zip) {

            var txtPostcode = zip;
            // var address = txtAddress1.value + ', ';
            // address += txtAddress2.value + ', ';
            // address += txtTown.value + ', ';
            var address = txtPostcode;
            // address += txtCountry.value;

            var geocoder;
            geocoder = new google.maps.Geocoder();
            geocoder.geocode({ address: address }, function (results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    var location = results[0].geometry.location;
                    var litLatClientId = document.getElementById("<%=litLat %>");
                    var litLongClientId = document.getElementById("<%=litLong %>");

                    $("#" + litLatClientId).val(location.lat());
                    $("#" + litLongClientId).val(location.lng());

                    // Successfully reach here but the bool variable 'addExist' value gets an 'Undefined' value.

                    return true;
                }
                else
                return false;
            });
        } 
4

1 回答 1

0

calculateCoordinates是 using geocode,这是一个异步函数。因此,它本身必须异步使用,以便从内部异步函数“返回”任何数据。这是通过使用回调模式完成的。

不幸的是,您正在同步使用它,并且注册插件也希望validate是同步的。因此基本上没有办法使这项工作。

于 2012-11-03T20:02:28.577 回答