مشکل چندبار ارسال شدن activeForm با ajax

ساخت وبلاگ
من برای ارسال اطلاعات سمت سرور به کمک فرم یک ویجت نوشتم که به صورت ajax اطلاعات رو سمت سرور ارسال میکنم ، وقتی که اطلاعات ثبت میشه اومدم توی یک بخش سایت به صورت ajax مطلب ثبت شده رو به کاربر نمایش میدم و قسمتی که فرم ارسال اطلاعات به صورت اجکس بوده رو با یک فرم جدید پر میکنم ، مشکل اینه که اگه فرم دوباره اطلاعات رو ارسال کنه بجای یکبار اطلاعات دوبار ارسال میشه و ذخیره میشه و به ازای هر ثبت فرم اطلاعات ضربدر دو ارسال میشه . 

کلاس ActiveForm

<?php
namespace appwidgets
class ActiveForm extends yiibootstrapActiveForm
{
public $isAjax = true;
public $success = [];
public $beforeSend = [];
public $complete = [];
public function run()
{
parent::run();
if($this->isAjax) {
$this->ajaxForm();
}
}
protected function ajaxForm()
{
$action = $this->action;
$id = $this->getId();
$view = $this->view;
$view->registerJs("$(document).on(/"beofreSubmit/"), '#$id', function(){
$.ajax({
url: '$action',
dataType: 'json',
data: $('#$id').serialize(),
method: 'post',
success: function(data){
" . implode(';', $this->success) . "
},
beforeSend: function(){
" . implode(';', $this->beforeSend) . "
}
complete: function() {
" . implode(';', $this->beforeSend) . "
}
});
return false;
});");
}
}

کد ویو مربوط به فرم

<?php
/* @var $this yiiwebView */
use appwidgetsActiveForm
$form = ActiveForm::begin([
'id' => 'test',
'success' => [ "if(data.b){ $('#form-container').html(data.b) } if(data.a){ $('#wall').appned(data.a) }" ]
])
echo $form->feild($model, 'pro1') ;
echo $form->feild($model, 'pro2') ;
echo $form->feild($model, 'pro3') ;
echo Html::submitButton('submit') ;
ActiveForm::end();

کد مربوط به ویو اصلی 

<?php
/* @var $this yiiwebView */
?>
<div id="form-container">
<?= $this->render('_form', compact('model')) ?>
</div>
<div id="wall"></div> 

اکشن ثبت فایل 

public function actionCreate(){ Yii::$app->response->format = Response::FORMAT_JSON;
$model = new File()
if($model->load(Yii::$app->request->post()) && $model->save()){
return [
'a' => $this->renderAjax('_wallObject', compact('model')),
'b' => $this->renderAjax('_form', [ 'model' => new File() ]),
];
}
return [ 'b' => $this->renderAjax('_form', compact('model')) ];
}

برنامه نویس...
ما را در سایت برنامه نویس دنبال می کنید

برچسب : نویسنده : خنجی prog بازدید : 221 تاريخ : سه شنبه 13 مهر 1395 ساعت: 9:48

خبرنامه