2015-06-06 4 views
3

я не могу найти способ в Yii2 для следующих действий:Yii2: Как проверить форму с AJAX, а затем отправить данные с помощью AJAX снова

  1. Сначала проверить свои формы с помощью AJAX, потому что у меня есть УНИКАЛЬНАЯ поле.
  2. Затем, если проверка правильности, отправьте данные формы в действие формы через AJAX.

Вот что я получил до сих пор:

На мой взгляд:

<?php 
     $form = ActiveForm::begin([ 
      'id' => 'subscribe-form', 
      'action' => ['site/subscribe'], 
      'validationUrl' => ['site/validate-subscribe'], 
      'validateOnSubmit' => true, 
      'enableAjaxValidation' => true, 
     ]) ?> 
     <?= $form->field($model, 'name')->input('text', ['class' => 'w-input']) ?> 
     <?= $form->field($model, 'email')->input('text', ['class' => 'w-input']) ?> 

     <div class="form-group"> 
      <?= Html::submitButton('SUSCRIBIRSE', ['class' => 'w-inline-block btn', 'name' => 'login-button']) ?> 
     </div> 
     <?php ActiveForm::end() ?> 

В мой контроллер:

public function actionValidateSubscribe(){ 
    if (Yii::$app->request->isAjax) { 
     Yii::$app->response->format = Response::FORMAT_JSON; 

     $model = new Subscription(Yii::$app->getRequest()->getBodyParams()['Subscription']); 

     if (!$model->validate()) { 
      return ActiveForm::validate($model); 
     } 
    } 
} 

public function actionSubscribe() 
{ 

    if (Yii::$app->request->isAjax) { 
     Yii::$app->response->format = Response::FORMAT_JSON; 

     $model = new Subscription(Yii::$app->getRequest()->getBodyParams()['Subscription']); 

     if(!$model->validate()){ 
      throw new NotAcceptableHttpException('Tiene errores de validación en la forma'); 
     } 



     if($model->save()){ 
      Yii::$app->mailer->compose('subscription', ['model'=>$model]) 
       ->setTo([$model->name => $model->email]) 
       ->setFrom(['Test' => '[email protected]']) 
       ->setSubject('Por favor confirme su suscripción') 
       ->send(); 
     } 

     $response = [ 
      'data'=>$model->getAttributes(), 
      'success'=>'true' 
     ]; 
     return $response; 
    } 
} 

В моих JS:

$(document).ready(function() { 
$('body').on('beforeSubmit', 'form#subscribe-form', function() { 
    var form = $(this); 
    // return false if form still have some validation errors 
    if (form.find('.has-error').length) { 
     return false; 
    } 

    // submit form 
    $.ajax({ 
     url : form.attr('action'), 
     type : 'post', 
     data : form.serialize(), 
     success: function (response) { 
      // do something with response 
     }, 
     error : function() { 

     } 
    }); 
    return false; 
}); 
}); 

Проблема заключается в том, что yii.ActiveForm.js не запускает события afterVAlidate или beforeSubmit, когда я устанавливаю «enableAjaxValidation» в true в моем ActiveForm.

ответ

3

Пробег: $('form#subscribe-form').on('beforeSubmit', function() {...});

Смежные вопросы