包含JQuery ajax的Javascript函数 - 函数返回undefined

Man*_*imo 3 jquery function undefined

谁能给我一个线索,为什么这不起作用?该函数返回undefined.它会警告一个布尔值,但仍然返回undefined?!

谢谢

    function IsUniqueEmail() {

        var email = $("#<%=EmailAddress.ClientID%>").val();

        if (email.length > 0) {

            $.ajax({
                url: 'handlers/validator.ashx',
                dataType: 'json',
                data: { "n": "email", "v": email },
                async: false,
                success: function(data) {
                    alert(eval(data.success));
                    return eval(data.success);
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    console.log(textStatus, errorThrown);
                    return true;
                }
            });
        }            
    }

    $(document).ready(function() {

        var execScript = $(".buttonStep1").attr("href").replace("javascript:", "");

        $(".buttonStep1").attr("href", "#").click(function() {
            // Add before click logic here
            var IsOk = IsUniqueEmail();
            if (IsOk) {
                $("#EmailAddressInUseMessage").hide();
                eval(execScript);
            }
            else {
                $("#EmailAddressInUseMessage").show();
            }
        });
    });
Run Code Online (Sandbox Code Playgroud)

这是ajax调用的响应

    { "success": false, "error" : "ERROR_EMAILINUSE" }
Run Code Online (Sandbox Code Playgroud)

Dav*_*und 7

使用AJAX时的脚本执行路径不是线性的.您IsUniqueEmail将在AJAX请求收到响应之前退出,不返回任何内容.

你要返回的是什么$.ajax,这是一个调用的方法,success它可能被忽略了.

您可以用这种方式重写代码:

$(document).ready(function() {
    $(".buttonStep1").click(function() {

        IsUniqueEmail();

        // never follow this link
        return false;

    });
});
Run Code Online (Sandbox Code Playgroud)

通过这种方式,按钮单击只是启动请求 - 它不会继续执行任何其他操作.之后,您将在AJAX响应中完成所有魔术:

function IsUniqueEmail() {

    var email = $("#<%=EmailAddress.ClientID%>").val();

    if (email.length > 0) {

        $.ajax({
            url: 'handlers/validator.ashx',
            dataType: 'json',
            data: { "n": "email", "v": email },
            async: false,
            success: function(data) {
                alert(eval(data.success));

                if(eval(data.success)) {

                   // Execute code to continue after the click here

                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                console.log(textStatus, errorThrown);
                return true;
            }
        });
    }            
}
Run Code Online (Sandbox Code Playgroud)