0

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

4 回答 4

3

$.ajax 函数是异步的,所以会继续执行

if (form_errors > 0) {
    return false;
}

在完成函数执行之前。

于 2013-10-15T09:36:43.293 回答
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);
}
于 2013-10-15T09:35:26.867 回答
0

考虑使用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();
    }
});
于 2013-10-16T07:24:41.530 回答
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;
}
于 2013-10-15T09:41:00.190 回答