Yii ajax验证博客演示 - 帖子/联系表格

时间:2013-01-01 06:09:34

标签: ajax yii

在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生成无效消息)

1 个答案:

答案 0 :(得分:1)

Ajax验证包括3个阶段:

  1. 使用表单字段的值向服务器发送ajax请求以验证它们。
  2. 验证字段并从服务器返回验证消息。
  3. 使用验证消息更新表单字段。
  4. 当您将enableAjaxValidation设置为true时,您正在处理第1阶段和第1阶段。 3,所以还剩下第2阶段。


    阶段2。

    默认情况下,ajax验证会触发POST ajax调用,并附加一个 1 'ajax' post参数,其值设置为要验证的表单的id。在您的情况下,它应该是:ajax --> contact-formajax --> 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的验证网址(actionvalidationUrl)或{clientOptionsajaxVar) 3}}。阅读clientOptions以查看选项。


    1 除了表单的字段外。