Yii:如何强制CGridview仅通过AJAX加载数据?

Yii:如何强制CGridview仅通过AJAX加载数据?,yii,Yii,有没有办法使CGridView在其所在视图的初始呈现时不加载数据,而是在初始页面加载后用后续AJAX请求加载第一个页面 这主要是为了性能优化。在CGridView后面有一个相当慢的数据模型,我希望能够以快速的方式加载页面,然后在几秒钟后通过AJAX请求加载数据。您可以如下修改操作: public function actionIndex() { $dataProvider = new CActiveDataProvider('User'); // The dataprovider your

有没有办法使CGridView在其所在视图的初始呈现时不加载数据,而是在初始页面加载后用后续AJAX请求加载第一个页面


这主要是为了性能优化。在CGridView后面有一个相当慢的数据模型,我希望能够以快速的方式加载页面,然后在几秒钟后通过AJAX请求加载数据。

您可以如下修改操作:

public function actionIndex() {
  $dataProvider = new CActiveDataProvider('User'); // The dataprovider your grid uses
  if (!$this->isAjaxRequest()) {
    $dataProvider->criteria->addCondition('1 = 0'); // You could also use 0, but I think this is more clear
  }

  [...]
}
然后在javascript部分的视图中:

$(function() { // If you are using jQuery this is executed when the page is loaded
  $.fn.yiiGridView.update("{id-of-your-grid-view}");
});

布鲁尔峡谷离我很近,多亏了他的建议,这让我走上了正确的道路。这项工作:

// Controller, after creating $dataProvider, before calling $this->render...
if (!Yii::app()->request->isAjaxRequest) {
    $dataProvider->criteria->addCondition('1 = 0');
}

// View
<script type="text/javascript">
$(window).load(function() {
    $('#id-of-grid').yiiGridView('update');
});
</script>
//控制器,在创建$dataProvider之后,在调用$this->render之前。。。
如果(!Yii::app()->request->isAjaxRequest){
$dataProvider->criteria->addCondition('1=0');
}
//看法
$(窗口)。加载(函数(){
$(“#网格id”).yiiGridView(“更新”);
});

只需在控制器中编写代码,如下所示:

$model= new Data('search');
$model->unsetAttributes();

if(isset($_GET['Data']))
   $model->attributes = $_GET['Data'];

if (!Yii::app()->request->isAjaxRequest)
   $data->id=0; //or something that sure model return empty
isAjaxRequest()不是控制器的方法。它是CHttpRequest的一个属性。因此,虽然您可以检查ajax请求,例如,如果(!Yii::app()->request->isAjaxRequest)。。。然后继续这个建议的解决方案,添加条件和更新函数,这实际上不起作用。网格根本没有加载。一旦我弄明白了,我会回来发布一个有效的解决方案。