在Yii博客演示中,包含在框架下载和此处:
http://www.yiiframework.com/demos/blog/
表单输入的ajax验证适用于帖子评论和登录表单...
演示\博客\保护\视图\ comment_form.php
和
演示\博客\保护\视图\ login.php中
都包括
之类的内容<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'comment-form',
'enableAjaxValidation'=>true,
)); ?>
或
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'login-form',
'enableAjaxValidation'=>true,
)); ?>
我尝试在views / site / contact.php和views / post / _form.php('id'=&gt;'contact-form'和'post-form')中添加类似的内容但是它不起作用(表格字段外的标签不会产生红色或绿色字段,具体取决于输入是有效还是无效,并且没有ajax生成无效消息)
答案 0 :(得分:1)
Ajax验证包括3个阶段:
当您将enableAjaxValidation
设置为true
时,您正在处理第1阶段和第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 进行类似的调整(从第一个代码片段)到 controllers / PostController.php 的actionCreate
和{{ 1}}方法。只是您的actionUpdate
支票将更改为:
if
额外信息。
if(isset($_POST['ajax']) && $_POST['ajax']==='post-form')
POST参数称为ajax
,默认为ajaxVar
。您可以更改许多默认设置,例如ajax
的验证网址(action
或validationUrl
)或{clientOptions
(ajaxVar
) 3}}。阅读clientOptions
以查看选项。
1 除了表单的字段外。