表单提交验证需要 5-10 秒

Validation Taking 5-10 sec on Form Submit

我有一个非常简单的注册表单,只需要用户名、电子邮件和密码。我想看看为什么在用户提交后需要 5-10 秒才能完成注册。我尝试在服务器端进行分析(参见 here),并已将其作为问题消除。

看来我的问题是客户端验证。我正在使用 https://jqueryvalidation.org/ JS 文件加上另一个自定义文件,告诉用户他们是否正在尝试使用已经存在的名称或密码:

$('.register-form').validate({

    submitHandler: function(form){

        $('.register-form').submit();

    },

    rules: {
        password: {
            required: true
        },

        tos: {
            required: true
        },

        username: {
            required: true,
            remote: '/api/v1/users/username/'
        },

        email: {
            required: true,
            email: true,
            remote: '/api/v1/users/email/'
        },

    },

    messages: {
        first_name: {
            required: 'Please include your first name.'
        },

        last_name: {
            required: 'Please include your last name.'
        },

        password: {
            required: 'Please create a password'
        },

        tos: {
            required: 'Please check that you agree to our TOS and Privacy Policy'
        },

        email: {
            required: 'Please include your email.',
            email: 'Please insert a valid email address.',
            remote: 'This email is already in use.'
        },

        username: {
            required: 'Please create a username.',
            remote: 'This username is already in use.'
        }

    }

});

当我使用 Chrome 的分析 (picture link) 时,问题似乎出在 register.js 和 jquery.validator.js 正在调用的数千个小任务中大约 10 秒彼此。具体来说,它总是在 register.js 上触发的 submitHandler: function(form) 行。所以我想我看到了问题,但我不清楚如何解释或修复它。

有什么想法吗?我对使用这些验证插件还很陌生。

这一行

$('.register-form').submit();

应该阅读

form.submit();

所以函数应该是这样的

$('.register-form').validate({
  submitHandler: function(form) {
    form.submit();
  },

   rules:...
});

否则你会一直递归调用提交

来自文档

Example: Use submitHandler to process something and then using the default submit. Note that "form" refers to a DOM element, this way the validation isn't triggered again.

https://jqueryvalidation.org/validate/