Ajax 验证包括 3 个阶段:
- 使用表单字段的值向服务器发送 ajax 请求以验证它们。
- 验证字段并从服务器返回验证消息。
- 使用验证消息更新表单字段。
当您设置enableAjaxValidation
为 时true
,您正在处理第 1 阶段和第 3 阶段,因此还剩下第 2 阶段。
阶段2。
默认情况下,ajax 验证触发 POST ajax 调用,附加1 个 'ajax'
post 参数,其值设置为id
正在验证的表单的值。在您的情况下,它应该类似于:ajax --> contact-form
和ajax --> post-form
.
所以你要做的就是在你的服务器端捕获这个 POST 请求,并在验证请求中发送的字段后发送响应。
POST 请求被发送到表单的action
url(默认情况下),在您的情况下将类似于: http://foo/index.php/site/contact
,这意味着您必须更改您的controllers/SiteController.php的actionContact
功能:
public function actionContact(){
$model = new ContactForm;
// checking if it is ajax validation request below
if(isset($_POST['ajax']) && $_POST['ajax']==='contact-form') {
echo CActiveForm::validate($model); // validate the form fields sent in POST, and return response
Yii::app()->end(); // end the application
}
// ... leave the rest of the code as is ...
}
在博客演示的views/site/contact.php中没有错误字段,因此您暂时无法看到消息。要查看它们,请将错误字段添加到表单中:
<div class="row">
<?php echo $form->labelEx($model,'name'); ?>
<?php echo $form->textField($model,'name'); ?>
<?php echo $form->error($model,'name'); // this line needs to be added ?>
</div>
为其他输入类似地添加错误字段。
对于post/_form.php对控制器/PostController.php的actionCreate
和actionUpdate
方法进行类似的调整(从第一个代码片段开始) 。只是您的if
支票将更改为:
if(isset($_POST['ajax']) && $_POST['ajax']==='post-form')
额外信息。
ajax
POST 参数称为,ajaxVar
默认为ajax
。您可以更改很多这些默认值,例如验证 url (或action
of validationUrl
)clientOptions
或. 阅读文档以查看选项。ajaxVar
$_POST['ajax']
clientOptions
1 除了表单的字段。