我有一个非常简单的注册表单,只需要用户名,电子邮件和密码。我试图了解为什么用户提交后需要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)时,看起来问题是大约10万个小任务,其中register.js和jquery.validator.js相互调用。具体来说,它始终在register.js上触发 submitHandler:function(form)行。所以我认为我看到了问题,但我不清楚如何解释它或修复它。
有什么想法吗?我是使用这些验证插件的新手。
答案 0 :(得分:0)
这一行
$('.register-form').submit();
应该阅读
form.submit();
所以函数看起来应该是这样的
$('.register-form').validate({
submitHandler: function(form) {
form.submit();
},
rules:...
});
另外,你继续以递归方式调用提交
来自文档
示例:使用submitHandler处理某些内容,然后使用默认提交。请注意,“form”指的是DOM元素,这样就不会再次触发验证。