У меня есть форма 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;
});
Спасибо за комментарии. Но это не влияет и не устраняет проблему. – user96675