2016-01-06 2 views
1

У меня есть форма ajax, которая передается дважды, и, следовательно, одна и та же запись дублируется дважды в db.Форма Ajax отправляется дважды в yii 1.1

Эти конкретные случаи случаются только при включении проверки на стороне клиента.

Я также попытался использовать e.stopImmediatePropagation(), но это также отключит отображение сообщений об ошибках, что не является решением в моем случае. Я хочу, чтобы проверка и представление формы работали нормально без репликации.

Вот мой код:

Контроллер:

public function actionIndex() { 

    $model = new Transaction(); 

    if (isset($_POST['ajax']) && $_POST['ajax'] === 'transaction-form') { 
     echo CActiveForm::validate($model); 

     Yii::app()->end(); 
    } 

    if (Yii::app()->request->isAjaxRequest) { 

     $model->attributes = $_POST['Transaction']; 

     if($model->save()){ 
      echo 'Success'; 
     } 

     Yii::app()->end(); 
    } 

    $this->render('index', array('model' => $model)); 
} 

Просмотр файла:

<div class="form"> 
<?php 
$form = $this->beginWidget('CActiveForm', array(
'id' => 'transaction-form', 
'action' => Yii::app()->createUrl('transaction/index'), 
'enableAjaxValidation'=>true, 
'enableClientValidation'=>true, 
'clientOptions' => array(
    'validateOnSubmit' => true, 
), 
    )); 
?> 


<p class="note">Fields with <span class="required">*</span> are required.</p> 

<?php echo $form->errorSummary($model); ?> 

<div class="row"> 
    <?php echo $form->labelEx($model,'BilledAmount'); ?> 
    <?php echo $form->textField($model,'BilledAmount',array('size'=>10,'maxlength'=>10)); ?> 
    <?php echo $form->error($model,'BilledAmount'); ?> 
</div> 

<div class="row"> 
    <?php echo $form->labelEx($model,'ChargedAmount'); ?> 
    <?php echo $form->textField($model,'ChargedAmount',array('size'=>10,'maxlength'=>10)); ?> 
    <?php echo $form->error($model,'ChargedAmount'); ?> 
</div> 

<div class="row"> 
    <?php echo $form->labelEx($model,'CardExpiry'); ?> 
    <?php echo $form->textField($model,'CardExpiry',array('size'=>4,'maxlength'=>4)); ?> 
    <?php echo $form->error($model,'CardExpiry'); ?> 
</div> 

<div class="row buttons"> 
    <input name="submit" type="submit" value="Submit"> 
</div> 

<?php $this->endWidget(); ?> 

</div><!-- form --> 

<script> 
    $(function() { 

    $('form#transaction-form').on('submit', function (e) { 

    e.preventDefault(); 

    var action = $("#transaction-form").attr('action'); 
    var datas = $("#transaction-form").serialize(); 

    $.ajax({ 
    type: 'post', 
    url: action, 
    data: datas, 
    success: function (msg) { 

     if(msg == 'Success'){ 
      location.reload(); 
     } 
    } 
    }); 


    return false; 

}); 

ответ

0

Ваши действия должны выглядеть следующим образом:

public function actionIndex() { 
    $model = new Transaction(); 
    if (Yii::app()->getRequest()->getIsAjaxRequest()) { 
     echo CActiveForm::validate($model); 
     Yii::app()->end(); 
    } 
    if (isset($_POST['Transaction'])) { 
     $model->attributes = $_POST['Transaction']; 
     if($model->save()){ 
     Yii::app()->user->setFlash('success', 'Transaction saved.'); 
       $this->refresh(); 
     }else{ 
      Yii::app()->user->setFlash('error', 'Transaction saving error.'); 
     } 
    } 
    $this->render('index', array('model' => $model)); 
} 
+0

Спасибо за комментарии. Но это не влияет и не устраняет проблему. – user96675

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