使用ajax进行Jquery表单验证

时间:2013-10-15 09:29:41

标签: javascript jquery ajax validation

我需要检查用户名是否存在。如果它存在,我增加一个变量“form_error”。 如果“form_errors”是> 0,然后我停止代码并返回false。

但是,当我进行Ajax调用时,我无法增加此变量。可能是范围/可见性问题?

所以,如果我在用户名上有错误,我的form_errors将永远为0,表单将提交...

我如何增加form_errors?

谢谢大家,我留下了一段代码

$('#add-sponsor').submit(function() {
var form_errors = 0;
var username = ('#username').val();
$.ajax({
        url         :   location.protocol + '//' + location.host + '/commands.php?action=check-username',
        data        :   {
                            username    : username
                        },
        type        :   'post'
    }).done(function (result) {
        if (result=='false') {
            $('#username').parent().addClass('has-error');
            $('#username').parent().removeClass('has-success');
            $('#username').parent().next('.help-block').text('Questo username già esiste');
            form_errors++;
        } else {
            $('#username').parent().addClass('has-success');
            $('#username').parent().removeClass('has-error');
            $('#username').parent().next('.help-block').text('');
        }
    }); // ajax


if (form_errors > 0) {
    return false;
}

console.log(form_errors); // <- this is forever 0
}

4 个答案:

答案 0 :(得分:3)

$ .ajax函数是异步的,因此将继续执行

if (form_errors > 0) {
    return false;
}
在执行完成功能之前

答案 1 :(得分:1)

if (form_errors > 0) {
    return false;
}

console.log(form_errors); // <- this is forever 0

如果您有错误,请在此处查看,如果有,则返回...因此,除非您没有错误,否则将永远不会触发console.log。也许只是使用......

if (form_errors > 0) {
    console.log(form_errors);
}

答案 2 :(得分:0)

您最好的选择可能是在提交功能之外使用某种变量 例如

var isValid = false;
$('#add-sponsor').submit(function() {
    if(!isValid)
    {
        var form_errors = 0;
        var username = ('#username').val();
        $.ajax({
                url         :   location.protocol + '//' + location.host + '/commands.php?action=check-username',
                data        :   { username    : username },
                type        :   'post'
        }).done(function (result) {
            if (result=='false') {
                $('#username').parent().addClass('has-error');
                $('#username').parent().removeClass('has-success');
                $('#username').parent().next('.help-block').text('Questo username già esiste');
                isValid = false;
                $('#add-sponsor').submit();
            } else {
                $('#username').parent().addClass('has-success');
                $('#username').parent().removeClass('has-error');
                $('#username').parent().next('.help-block').text('');
                isValid = true;
                $('#add-sponsor').submit();
            }
        }); // ajax

        return false;
    }
    return true;
}

答案 3 :(得分:0)

考虑使用jQuery validation plugin?您可以使用远程验证规则设置表单,以检查用户名是否有效。 jQuery验证让你在submitHandler或invalidHandler中实现你的回调。

如果要测试,请尝试使用此代码。只需确保将jquery.validate.js以及additional-methods.js包含到您的页面中。

var validator = jQuery("the-sponsor-form").validate({
    messages: {
        username: {
            remote: 'Questo username già esiste'
        }
    },
    rules: {
        username: {
            required: true,
            remote: {
                url: location.protocol + '//' + location.host + '/commands.php?action=check-username',
                type: 'post',
                data: {
                    username: $('#username').val();
                }
            }
        }
    },
    submitHandler: function(form) {
        alert("now submit the form");
        jQuery(form).submit();
    }
});