带有ajax计时问题的jquery验证程序

带有ajax计时问题的jquery验证程序,jquery,ajax,validation,Jquery,Ajax,Validation,在下面的代码中,ajax调用起作用,并且正确地更新了isTaken。但是return isTaken在ajax调用完成之前执行,因此它总是返回初始false设置async=true已被弃用,那么在返回正确更新的isTaken响应之前,如何等待ajax调用完成 $.validator.addMethod("checkExists", function (value, element) { var email = $("#email").val();

在下面的代码中,ajax调用起作用,并且正确地更新了
isTaken
。但是
return isTaken
在ajax调用完成之前执行,因此它总是返回初始
false
设置
async=true
已被弃用,那么在返回正确更新的
isTaken
响应之前,如何等待ajax调用完成

    $.validator.addMethod("checkExists",
        function (value, element) {

            var email = $("#email").val();
            var data = {email: email};

            var isTaken = false;
            $.ajax({
                type: "POST",
                url: "http://localhost/CFBserver/check_email.php",
                data: data,
                success: function (response) {
                    isTaken = (response == 1) ? true : false;
                }
            });
            return isTaken;
        },
        "This username is already taken! Try another."
        );
用于此,它在完成回调函数之前等待传递的AJAX调用完成

$.validator.addMethod("checkExists",
    function (value, element) {

        var email = $("#email").val();
        var data = {email: email};

        $.when(
            return $.ajax({
                type: "POST",
                url: "http://localhost/CFBserver/check_email.php",
                data: data
            });
        ).done(function(response) {
            return response == 1; // returns true is response is 1, false otherwise
        });
    },
    "This username is already taken! Try another."
    );
我还根据if语句返回布尔值,从而简化了代码

我会将这个AJAX调用从您的函数中取出,并将其作为一个单独的调用—这样代码看起来会更好,并且可以从其他地方进行调用

$.when(checkMail).done(function(response) {
    return response == 1; // returns true is response is 1, false otherwise
});

// Outside of validator function...

function checkMail() {
     return $.ajax({
        type: "POST",
        url: "http://localhost/CFBserver/check_email.php",
        data: data
    });
}
此外,您是否还希望处理AJAX调用中的错误,请使用
then
而不是
done
,并提供两个函数作为回调:一个用于成功,另一个用于失败:

$.when(checkMail).then(function(response) {
    // Function gets called as 'success' from AJAX
    return response == 1;
}, function (errorResponse) {
    // Function gets called as 'error' from AJAX
    // return false; // or
    // return "Error when checking email: " + errorResponse;
});
用于此,它在完成回调函数之前等待传递的AJAX调用完成

$.validator.addMethod("checkExists",
    function (value, element) {

        var email = $("#email").val();
        var data = {email: email};

        $.when(
            return $.ajax({
                type: "POST",
                url: "http://localhost/CFBserver/check_email.php",
                data: data
            });
        ).done(function(response) {
            return response == 1; // returns true is response is 1, false otherwise
        });
    },
    "This username is already taken! Try another."
    );
我还根据if语句返回布尔值,从而简化了代码

我会将这个AJAX调用从您的函数中取出,并将其作为一个单独的调用—这样代码看起来会更好,并且可以从其他地方进行调用

$.when(checkMail).done(function(response) {
    return response == 1; // returns true is response is 1, false otherwise
});

// Outside of validator function...

function checkMail() {
     return $.ajax({
        type: "POST",
        url: "http://localhost/CFBserver/check_email.php",
        data: data
    });
}
此外,您是否还希望处理AJAX调用中的错误,请使用
then
而不是
done
,并提供两个函数作为回调:一个用于成功,另一个用于失败:

$.when(checkMail).then(function(response) {
    // Function gets called as 'success' from AJAX
    return response == 1;
}, function (errorResponse) {
    // Function gets called as 'error' from AJAX
    // return false; // or
    // return "Error when checking email: " + errorResponse;
});

检查这个:检查这个:谢谢Siavas,这是我需要的。完美的谢谢你,西亚瓦斯,这是我需要的。完美的