【问题标题】:ajax validation within partially rendered div部分呈现的 div 中的 ajax 验证
【发布时间】:2012-03-22 11:09:03
【问题描述】:

我正在尝试在 <div class="b"> 中处理 ajax 验证,该验证是通过使用 ajax 部分呈现的...

$('.a').click(function(event){
        $.ajax({
            url: '<?php echo Yii::app()->createUrl('myController/myAction'); ?>',
            type: "POST",
            success: function( data ) {
                $('.b').html(data);
          }
        });
    });

在控制器中:

public function actionMyAction()
{
    $form = new MyForm;

    if(isset($_POST['MyForm']))
    {
        $form->attributes=$_POST['MyForm'];
        if($form->validate())
        {
            ...
            $this->refresh();
        }
    }

    $this->renderPartial('myView', array('myForm'=>$form));
}

如果我使用 render 而不是 renderPartial 它会按预期工作。我错过了什么?

任何帮助将不胜感激。

【问题讨论】:

  • 如果您怀疑成功回调,请尝试在其中输出一些内容以验证它是否被调用。您可能还想提高日志级别,以便全面了解服务器上发生的情况。另外,尝试使用 REST 客户端或其他可以显示独立于 UI 的输出的东西来点击您的 AJAX POST url。

标签: php ajax validation yii


【解决方案1】:

我的朋友帮我解决了这个问题。这是他的解决方案:

渲染结果应使用processOutput 进行后处理。这个方法"对render()生成的输出进行后处理。这个方法在render()和renderText()的最后被调用。如果有注册的客户端脚本,这个方法会在合适的地方插入到输出中。如果有动态内容,也会插入。这种方法还可以将持久化的页面状态保存在页面中的有状态表单的隐藏字段中”

渲染结果是否进行后处理由$processOutput参数定义,默认为falserenderPartial(string $view, array $data=NULL, boolean $return=false, boolean $processOutput=false)

代替

$this->renderPartial('myView', array('myForm'=>$form));

你应该打电话:

$this->renderPartial('myView', array('myForm'=>$form), false, true);

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 2016-01-27
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    相关资源
    最近更新 更多