رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل چندبار ارسال شدن activeForm با ajax
#1
من برای ارسال اطلاعات سمت سرور به کمک فرم یک ویجت نوشتم که به صورت ajax اطلاعات رو سمت سرور ارسال میکنم ، وقتی که اطلاعات ثبت میشه اومدم توی یک بخش سایت به صورت ajax مطلب ثبت شده رو به کاربر نمایش میدم و قسمتی که فرم ارسال اطلاعات به صورت اجکس بوده رو با یک فرم جدید پر میکنم ، مشکل اینه که اگه فرم دوباره اطلاعات رو ارسال کنه بجای یکبار اطلاعات دوبار ارسال میشه و ذخیره میشه و به ازای هر ثبت فرم اطلاعات ضربدر دو ارسال میشه . 

کلاس ActiveForm
<?php
namespace app\widgets

class ActiveForm extends \yii\bootstrap\ActiveForm
{
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 yii\web\View */
use app\widgets\ActiveForm

$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 yii\web\View */

?>

<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'))
 ];
}
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان