Facebook注册插件+验证无法从功能返回值

时间:2012-11-03 18:46:36

标签: javascript facebook

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

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

我无法将值返回到addExist变量,并且它总是返回'Undefined'。有人可以帮忙吗?感谢。

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

1 个答案:

答案 0 :(得分:0)

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

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

相关问题