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

done 関数が実行される前。

于 2013-10-15T09:36:43.293 に答える
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 に答える