【发布时间】:2012-02-05 04:46:44
【问题描述】:
在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 的内置功能还是我必须自己编写代码才能做到这一点?
【问题讨论】:
-
请务必使用“Yii::app()->request->isAjaxRequest”来检查请求是否为 Ajax 请求。