Yii2: ajax form validation on an ajax submitted form Yii2: ajax form validation on an ajax submitted form ajax ajax

Yii2: ajax form validation on an ajax submitted form


You should set up validationUrl with a different URL compared to the URL that you are submitting the form to. In this way you can have the validation function that would validate and return the return ActiveForm::validate($model); and the normal submit form that does something else.

You can read more about validationUrl here:


I have found solution :

Form :

 <?php    $form = ActiveForm::begin(['id' => 'form-add-contact', 'enableAjaxValidation' => true, 'validationUrl' => Yii::$app->urlManager->createUrl('contacts/contacts/contact-validate')]);    ?>

Submit Via Ajax :

<?php$script = <<< JS   $(document).ready(function () {         $("#form-add-contact").on('beforeSubmit', function (event) {             event.preventDefault();                        var form_data = new FormData($('#form-add-contact')[0]);            $.ajax({                   url: $("#form-add-contact").attr('action'),                    dataType: 'JSON',                     cache: false,                   contentType: false,                   processData: false,                   data: form_data, //$(this).serialize(),                                         type: 'post',                                           beforeSend: function() {                   },                   success: function(response){                                                toastr.success("",response.message);                                               },                   complete: function() {                   },                   error: function (data) {                      toastr.warning("","There may a error on uploading. Try again later");                       }                });                            return false;        });    });       JS;$this->registerJs($script);?>

Controller :

/*     * CREATE CONTACT FORM  AJAX VALIDATION ACTION     */    public function actionContactValidate() {        $model = new ContactsManagement();        if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {            $model->company_id = Yii::$app->user->identity->company_id;            $model->created_at = time();            \Yii::$app->response->format = Response::FORMAT_JSON;            return ActiveForm::validate($model);        }    }/**     * Quick Add Contact Action     * @param type $id     * @return type     */    public function actionAddContact() {                   $model = new ContactsManagement();        if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {            $transaction = \Yii::$app->db->beginTransaction();            try {                if ($model->validate()) {                    $flag = $model->save(false);                    if ($flag == true) {                        $transaction->commit();                        return Json::encode(array( 'status' => 'success', 'type' => 'success', 'message' => 'Contact created successfully.'));                    } else {                        $transaction->rollBack();                    }                } else {                    return Json::encode(array('status' => 'warning', 'type' => 'warning', 'message' => 'Contact can not created.'));                }            } catch (Exception $ex) {                $transaction->rollBack();            }        }        return $this->renderAjax('_add_form', [                    'model' => $model,        ]);    }