Yii 使用 ajax 进行分页

Posted

技术标签:

【中文标题】Yii 使用 ajax 进行分页【英文标题】:Yii pagination with ajax 【发布时间】:2014-05-13 11:11:21 【问题描述】:

我需要启用 ajax 分页 我的代码 控制器(更新内容 ajax)

 function actionIndex()
        $dataProvider=new CActiveDataProvider('News', array(

            'pagination'=>array(
                'pageSize'=>1,
            ),
        ));
        if (Yii::app()->request->isAjaxRequest) 
            $done =$this->renderPartial('index', array('dataProvider' => $dataProvider), true);
            echo CJSON::encode($done);
            Yii::app()->end();
        

        $this->render('index', array(
            'dataProvider'=>$dataProvider,
        ));
    

JS(点击事件显示渲染部分)

$(document).ready(function()
    $(".menunews").click(function() 
        $( "body" ).addClass( "news" );
        $.ajax(
            url: 'index.php/news',
            type: "GET",
            dataType: "JSON",
            success: function(data)
                    $('#news').append(data);
                

        ).fail(function()
                alert("Error");
            );
    );

查看

<div class="newscont">
    <h1>News</h1>


        <?php $this->widget('zii.widgets.CListView', array(
            'dataProvider'=>$dataProvider,
            'itemView'=>'_view',
            'template'=>"items\npager",
            'ajaxUpdate'=>'true',
            'enablePagination'=>true,
            'pager' => array(
                'firstPageLabel'=>'<<',
                'prevPageLabel'=>'<',
                'nextPageLabel'=>'>',
                'lastPageLabel'=>'>>',
                'maxButtonCount'=>'10',
                'header'=>'<span>Pagination</span>',
                'cssFile'=>Yii::app()->getBaseUrl(true).'/themes/phil/css/pager.css',
            ),
        )); ?>


</div>

但是如果我使用 ajax 加载页面抛出渲染部分,我的分页不起作用,我该如何解决?

【问题讨论】:

我不完全确定,但我认为你不应该返回 JSON,而只是 html 和 ListView 将完成其余的工作 或者如果你自己做所有的事情......忘记 ajaxUpdate 函数,并处理整个请求。我认为你两者都做,如果你想使用列表视图的自动分页,你必须去决定,或者自己做整个分页 感谢您的回复,但我如何才能返回 html?我认为这是不正确的,现在我正在尝试更改 CListView js 以更新页面,但它不起作用 您可以在省略 JSON::encode 时简单地返回 HTML。并在您的脚本中设置 dataType:HTML 【参考方案1】:

在您的控制器中执行此操作

    if (Yii::app()->request->isAjaxRequest) 
                $done =$this->renderPartial('index', array('dataProvider' => 
$dataProvider), true);
                echo $done;
                Yii::app()->end();
            

并将您的 ajax 调用更改为此

$.ajax(
            url: 'index.php/news',
            type: "POST",
            dataType: "html",
            success: function(data)
                    $('#news').html(data);
                

        )

【讨论】:

这正是我的建议【参考方案2】:

@Let me see's answer 也是对的,但第二种方法是你可以这样使用:

if (Yii::app()->request->isAjaxRequest) 
      $done =$this->renderPartial('index', array('dataProvider' => $dataProvider), true);
      echo CJSON::encode(array(
                'status' => 'success',
                'html' => $done,
           ));
      Yii::app()->end();

$.ajax(
      url: 'index.php/news',
      type: "GET",
      dataType: "JSON",
      success: function(data)
          $('#news').append(data.html);
      
);

从服务器获取JSON 是正确的方法,或者你想得到HTML 响应使用@让我看看的答案

【讨论】:

以上是关于Yii 使用 ajax 进行分页的主要内容,如果未能解决你的问题,请参考以下文章

以多页分页打印所有数据

react-slick 自定义分页分页道具使用

单页分页问题中的多个角度材料表

一个视图中的 CI 多页分页,

Yii2.0实现AJAX搜索分页

Yii2.0实现AJAX搜索分页