繁体   English   中英

使用ajax进行jQuery表单验证

[英]Jquery form validation with ajax

我需要检查用户名是否存在。 如果存在,我将增加一个变量“ 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
}

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

if (form_errors > 0) {
    return false;
}

在执行完功能之前。

if (form_errors > 0) {
    return false;
}

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

您在这里检查是否有错误,如果是,则返回...所以,除非没有错误,否则console.log将永远不会被点击。 也许只是用...

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

最好的选择可能是在您的Submit函数之外使用某种变量,例如

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

考虑使用jQuery验证插件吗? 您可以使用远程验证规则来设置表单,以检查用户名是否有效。 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();
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM