تالار گفتمان nCIS.ir

نسخه‌ی کامل: مشکل چندبار ارسال شدن activeForm با ajax
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.

a1552f

من برای ارسال اطلاعات سمت سرور به کمک فرم یک ویجت نوشتم که به صورت 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'))
 ];
}