我的表格如下:
<?php widgets\Pjax::begin(['id' => 'conference', 'enablePushState' => false]) ?>
<?php $form = ActiveForm::begin(['id' => $model->formName(), enableAjaxValidation' => true, 'validationUrl' => \yii\helpers\Url::toRoute(['validation'])]); ?>
<?php echo $form->field($model, 'eTitle')->textInput(['maxlength' => true])->label(false) ?>
<?= Html::submitButton(Yii::t('app', 'save'), ['class' => 'btn btn-grid']) ?>
<?php ActiveForm::end(); ?>
<?php widgets\Pjax::end();?>
我已经写了跟随jquery的ajax:
<?php
$script = <<< JS
$('.conference').on('beforeSubmit', 'form#{$model->formName()}', function(e) {
var \$form = $(this);
$.post(
\$form.attr("action"),
\$form.serialize()
)
.done(function(result) {
var result = $.parseJSON(result);
var responseStatus = result['status'];
switch (responseStatus) {
case 'success':
alert(result['message']);
var url = 'index.php?r=paper-conference/create';
$.pjax.reload({container:'#conferences', url:url, timeout: false , push: false, replace: false});
$('#modal').modal('hide');
break;
case 'fail':
//T0 D0: Change to Message Box
alert(result['message']);
break;
default:
}
}).fail(function() {
//T0 D0: do error log
alert('server error');
});
return false;
});
JS;
$this->registerJs($script);
?>
此形式以两种方式呈现,一种是模式形式,有时是一种正常形式。当它呈现为模态时,我想保存表单并显示alert('successfull')
,然后关闭模态。
如果以正常形式(非模式形式)呈现,我想通过回发保存,而不使用pjax。
目前,当将其渲染为模态,保存然后关闭模态时,它可以很好地工作。但我不知道如何呈现为正常形式并禁用pjax。我尝试过
<?= Html::submitButton(Yii::t('app', 'save'), ['class' => 'btn btn-grid', 'data-pjax' => 0]) ?>
但是它不起作用,由ajax保存。
这是我的控制器:
public function actionCreate()
{
$model = new Conference();
if ($model->load(Yii::$app->request->post())) {
if ($model->save()) {
echo 'successfull';
}
} else {
if (Yii::$app->request->isAjax)
return $this->renderAjax('_form', [
'model' => $model,
]);
return $this->render('_form', [
'model' => $model,
]);
}
}