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')