目前实现ajax提交和验证的同时.我正在使用自定义功能:
- $('.edit_form').submit(function (e) {
- e.preventDefault();
- var form = $(this);
- var formData = $(this).serialize();
- if (form.find('.has-error').length) {
- return false;
- }
- $.ajax({
- url: form.attr("action"),type: form.attr("method"),data: formData,success: function (data) {
- ...
- },error: function () {
- alert("Something went wrong");
- }
- });
- });
这里是PHP端,验证我的配置看起来像这样:
- $form = ActiveForm::begin([
- 'id' => "some_form",'action' => ['user/edit'],'options' => ['class' => 'edit_form'],'enableAjaxValidation' => false,'enableClientValidation' => true,]); ?>
我相信这不是实现我所需要的最好方法.特别是在验证错误的情况下,我用于防止提交的部分:
- if (form.find('.has-error').length) {
- return false;
- }
有什么建议么?如何使用Yii 2的内置设置正确地实现ajax提交和验证?
解决方法
使用beforeSubmit事件而不是提交,beforeSubmit只会在表单通过验证后被触发.
- $('form').on('beforeSubmit',function(e) {
- var form = $(this);
- var formData = form.serialize();
- $.ajax({
- url: form.attr("action"),success: function (data) {
- ...
- },error: function () {
- alert("Something went wrong");
- }
- });
- }).on('submit',function(e){
- e.preventDefault();
- });