初试 对于数据量过大时,datetables的后台分页

前端js:

 

​​​​​​​var t=$('#basic-datatables').DataTable({
            'language': {
                'emptyTable': '没有数据',
                'loadingRecords': '加载中...',
                'processing': '查询中...',
                'search': '检索:',
                'lengthMenu': '每页 _MENU_ 件',
                'zeroRecords': '没有数据',
                'paginate': {
                    'first':      '第一页',
                    'last':       '最后一页',
                    'next':       '',
                    'previous':   ''
                },
                'info': '共 _TOTAL_ 条记录 / _PAGES_ 页 ',
                'infoEmpty': '没有数据',
                'infoFiltered': '(过滤总件数 _MAX_ 条)'
            },bFilter: false,    //去掉搜索框方法三:这种方法可以
            bLengthChange: false,   //去掉每页显示多少条数据方法
            //每页显示三条数据
            pageLength: 3,
            bStateSave:true,
            serverSide: true,
            ajax: function (data, callback, settings){
                var pagesize = data.length;//页面显示记录条数,在页面显示每页显示多少项的时候,页大小
                var start = data.start;//开始的记录序号
                var page = (data.start) / data.length + 1;//当前页码
                var data = {
                    cmd:'getMusicData',
                    start:start,
                    page: page,
                    pagesize: pagesize,//这里只传了当前页和页大小,如果有其他参数,可继续封装
                }

                $.ajax({
                    type: "get",
                    url: "getData.php",
                    cache : false,  //禁用缓存
                    data: data,   //传入已封装的参数

                    success: function(data) {
                        var arr = "";
                        if ('object' == typeof data) {
                            arr = data;
                        } else {
                            arr = $.parseJSON(data);//将json字符串转化为了一个Object对象
                        }
                        console.log("============数据==========")
                        console.log(arr)
                        var returnData = {};                      
                       returnData.recordsTotal = arr.data.pagination.totalCount;//totalCount指的是总记录数
                      returnData.recordsFiltered = arr.data.pagination.totalCount;//后台不实现过滤功能,全部的记录数都需输出到前端,记录数为总数
                        returnData.data = arr.data.musiclist;//这个是后台数据返回的数据列表
                        console.log("======returnData.data=======")
                        console.log(returnData.recordsTotal)
                        console.log(returnData.recordsFiltered)
                        callback(returnData);//这个别忘了!!!
                    }
                });

//                //指定数据源
//                url: "getData.php",
//                type:"get",
//                data:{
//                    "cmd":'getMusicData'
//                }
            },
            columns: [{
                "data": 'ID' //此列不绑定数据源,用来显示序号
            },

                {
                    "data": "NAME"
                },
                {
                    "data": "SINGER"
                }
                ,{
                    "data":"PATH"
                },{
                "data":null
                }


            ],
            "columnDefs": [{
                // "visible": false,
                //"targets": 0
            },
                {"orderable":true,"targets":1},
                {"orderable":true,"targets":2},
                {"orderable":true,"targets":3},

                {
                    "render": function(data, type, row, meta) {
                        //渲染 把数据源中的标题和url组成超链接
                        console.log(data);
                
                   return 1;


                    },
                    //指定是第三列
                    "targets": 4
                }],

        });

后台代码:

if($cmd=='getMusicData'){
    $end=$start+$pagesize;
    $obj=new query();
    $query="select rownum,e.* from(select rownum numrow,d.* from(select a.* from music_info a  order by a.id) d where rownum<=$end )e where numrow>$start  ";
    $binds=array();
    $i=0;
    $select=$obj->do_query($conn,$query,$binds,1);
    while(ocifetchinto($select,$row,OCI_ASSOC)){
        $res['data']['musiclist'][$i]['ID']=$i+1;
        $res['data']['musiclist'][$i]['NAME']=$row["NAME"];
        $res['data']['musiclist'][$i]['SINGER']=$row["SINGER"];
        $res['data']['musiclist'][$i]['PATH']=$row["PATH"];
$i++;
    }

    $cx="select count(id) as num from music_info";
    $bd=array();
    $sel=$obj->do_query($conn,$cx,$bd,1);
    ocifetchinto($sel,$count,OCI_ASSOC);

    $res['data']['pagination']['pageCount']=(int)($count['NUM']/$pagesize)+1;
    $res['data']['pagination']['pagesize']=$pagesize;
    $res['data']['pagination']['page']=$page;
    $res['data']['pagination']['totalCount']=$count['NUM'];
    print_r(__json_encode(array_iconv($res)));

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值