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 em>的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 对 controllers/PostController.php 的 actionCreate 和 @987654335 进行类似的调整(从第一个代码 sn-p) @ 方法。只是您的if 支票将更改为:
if(isset($_POST['ajax']) && $_POST['ajax']==='post-form')
额外信息。
ajax POST 参数称为ajaxVar,默认为ajax。您可以更改很多这些默认值,例如验证 url(clientOptions 的action 或validationUrl),或clientOptions 的ajaxVar($_POST['ajax'])。阅读documentation 以查看选项。
1除了表单的字段。