在CustomerController
中,我有create
动作:
public function actionCreate() {
$model = new Customer;
$this->performAjaxValidation($model, 'customer-form');
//only support ajax saving
if (isset($_POST['Customer']) && Yii::app()->getRequest()->getIsAjaxRequest()) {
$model->setAttributes($_POST['Customer']);
$saveSuccess = $model->save();
if ($saveSuccess) {
//should echo a success message
}
else {
//should echo error messages
}
Yii::app()->end();
}
$this->render('create', array('customer' => $model));
}
在视图中,我使用的是CActiveform:
$form = $this->beginWidget('CActiveForm', array(
'id' => 'customer-form',
'enableAjaxValidation' => true,
'clientOptions'=>array(
'validateOnSubmit'=>false
)
)
);
如您所见,我将enableAjaxValidation
设置为true,但我将客户端选项validateOnSubmit
设置为false。
如果我将其设置为true,则在表单提交时,它将首先向服务器发送AJAX POST请求,然后服务器将以JSON格式返回错误消息(如果有),CActiveForm将在视图中自动显示错误摘要并阻止表单提交。
如果没有找到错误,表单将执行第二次 POST请求(非AJAX)并实际提交表单。
但这不是我追求的行为。
理想情况下,我希望有一个单个 AJAX POST请求,这样当表单提交时,服务器将返回成功或错误消息,CActiveForm将自动显示它们。
这是Yii内置的内容还是我必须编写自己的代码呢?
答案 0 :(得分:4)
要执行ajax提交,您需要将CHtml::submitButton()
替换为ajaxSubmitButton()
。请在此处查看:http://www.yiiframework.com/doc/api/1.1/CHtml#ajaxSubmitButton-detail