من برای ارسال اطلاعات سمت سرور به کمک فرم یک ویجت نوشتم که به صورت 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) . "
}
});
retu 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()){
retu [
'a' => $this->renderAjax('_wallObject', compact('model')),
'b' => $this->renderAjax('_form', [
'model' => new File()
]),
];
}
retu [
'b' => $this->renderAjax('_form', compact('model'))
];
}
برنامه نویس...
ما را در سایت برنامه نویس دنبال میکنید
برچسب:
نویسنده: خنجی
بازدید: 256
تاريخ: سه
شنبه
13 مهر
1395 ساعت: 9:48