Yii通过ajax按钮更新cgridview不工作。

Yii通过ajax按钮更新cgridview不工作。,yii,cgridview,Yii,Cgridview,我的控制器中有: public function actionFilterClients { if (Yii::app()->request->isAjaxRequest) { if (isset($_POST['category_id'])) { $criteria = new CDbCriteria; $criteria->condition = "user_id=:user_id";

我的控制器中有:

public function actionFilterClients {
    if (Yii::app()->request->isAjaxRequest) {
        if (isset($_POST['category_id'])) {
            $criteria = new CDbCriteria;
            $criteria->condition = "user_id=:user_id";
            $criteria->params = array(':user_id' => Yii::app()->user->id);
            $criteria->compare('category_id',$_POST['category_id'],true);

            $dataProvider = new CActiveDataProvider('Client', array(
                                    'criteria'=>$criteria,
                                ));
            $this->renderPartial('transfer_step_3' , array('dataProvider'=>$dataProvider)) ;
        }
    }
}
$this->renderPartial('_ajax_transfer_step_3' , array('dataProvider'=>$dataProvider)) ;
在我看来,除其他事项外,我有:

<?php $filter=$this->beginWidget('CActiveForm', array(
            'id'=>'client-filter-form',
            'enableAjaxValidation'=>false,
            'htmlOptions'=>array('class'=>'form-horizontal'),
        )); ?>
        <label for="category_id">View clients in category:</label>
        <?php echo CHtml::dropDownList('category_id','',Client::clientCategories(), array('options' => array('2'=>array('selected'=>true)))); ?>

        <?php
            echo CHtml::ajaxButton(
                'Filter Clients',
                'filterclients',
                array(
                    'type'=>'POST',
                    'update'  => 'client-grid' ,
                    'success' =>"function(data) {
         \$.fn.yiiGridView.update('client-grid');}",
                )
            );
        ?>
        <?php $this->endWidget(); ?>

查看类别中的客户端:
由于这是一个多步骤表单,cgridview数据提供程序默认为列出所有客户端($clients->moveclients()列出所有客户端)

ajax按钮将
category\u id
正确地发送到客户端/filterClient url

我可以通过firebug看到ActionFilterClient正确地返回呈现的html(使用正确的客户端),但是gridview没有更新


为什么不呢?

最后,我添加了另一个只有gridview的视图,并修改了我的代码:

控制器:

public function actionFilterClients {
    if (Yii::app()->request->isAjaxRequest) {
        if (isset($_POST['category_id'])) {
            $criteria = new CDbCriteria;
            $criteria->condition = "user_id=:user_id";
            $criteria->params = array(':user_id' => Yii::app()->user->id);
            $criteria->compare('category_id',$_POST['category_id'],true);

            $dataProvider = new CActiveDataProvider('Client', array(
                                    'criteria'=>$criteria,
                                ));
            $this->renderPartial('transfer_step_3' , array('dataProvider'=>$dataProvider)) ;
        }
    }
}
$this->renderPartial('_ajax_transfer_step_3' , array('dataProvider'=>$dataProvider)) ;
原始视图:

<?php $filter=$this->beginWidget('CActiveForm', array(
            'id'=>'customer-filter-form',
            'enableAjaxValidation'=>false,
            'htmlOptions'=>array('class'=>'form-horizontal'),
        )); ?>
        <label for="category_id">View customers in category:</label>
        <?php

            echo CHtml::dropDownList('category_id', '', Customer::customerCategories(),
                array(
                        'ajax' => array(
                                'type'=>'POST',
                                'url'=>CController::createUrl('filtercustomers'),
                                'data'=>'js:jQuery(this).serialize()',
                                'success'=>'function(response) {
                                        jQuery("#customer-grid").html(response)

                                }',
                        )
                )
            );
        ?>
        <?php $this->endWidget(); ?>

查看类别中的客户:

请从代码中删除这一行,看看会发生什么?”success'=>“函数(数据){$.fn.yiiGridView.update('client-grid');}”现在已正确调用FilterClient,但firebug中的POST响应为blankok,看起来isset($\u POST)返回false,因此它不会进入if代码内部。请写以下几行:CVarDumper::Dump($\u POST,100,true);die()在您检查isajaxRequest的地方之后,然后查看firebug中得到的响应,并告诉我Post filterusers的响应是:
array('category\u id'=>'3')