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