2016-09-14 50 views
0

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

它看起来像我的问题是客户端验证。我使用的是告知用户,如果他们正试图使用​​已经存在的名称或密码的用户的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互相调用。具体而言,它始终是submitHandler:函数(表单)在register.js上触发的行。所以我认为我看到了问题,但我不清楚如何解释或解决问题。

任何想法?我对使用这些验证插件相当陌生。

+0

*“加上其他自定义文件” * ...问题是有可能的原因或远程验证花费很长的时间。可以使用[jQuery全局ajax处理程序](http://api.jquery.com/category/ajax/global-ajax-event-handlers/)来监视远程检查 – charlietfl

+0

也为什么你不只是使用'required' 'tos'?请注意,触发jQuery提交将再次运行验证,您的警报不会阻止表单提交 – charlietfl

+0

感谢您的TOS建议。有一些小的理由让它成为警报,但我只是修复了一些小问题,并更改了register.js脚本。 – wraasch

回答

0

此行

$('.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/

+0

完美无缺!如果我有名誉,我会高兴。 – wraasch