jQuery Datatable(V1.10.7) server side processing

  Datatable是jQuery一个强大的插件,详见https://www.datatables.net/,下面本人略总结在CodeIghiter框架的前端使用datatable的方法。

常用的配置选项:

根据数据源、性能要求可以配置各种配置项,下面列举几个常用的选项:

•aaData: js array数据源数组,格式可以是二维数组 [ [a,b,c],[d,e,f] ] 或json串数组(支持深度嵌套),后者需结合列定义的mData选项,指定目标数据;

•bDeferRender:延迟渲染模式,开始只生成当前页所需的DOM结构,可以极大提高加载速度(适用js array和ajax source数据源);

•aaSorting:指定预设排序列,如需不需要预设排序可以指定为[];

•bSortClasses: 排序操作时给对应列的单元格加上区分标记用的class,可以指定false以禁用,提高大数据量的排序操作;

•aLengthMenu,iDisplayLength,sPaginationType: 分页、页码相关配置项,较简单,可以参考官方API;

•oLanguage:语言包选项,可以分别指定各子语句翻译或赋值整个包对象(json串),也可以指定 sUrl 值通过ajax方式获取语言包文件(目前在我们的产品中,已全部改用直接赋值语言包对象,以避免一些请求被转向的异常情况)。

列定义选项:

•列定义(column)是Data Table配置中较重要也是较复杂的配置选项,主要涉及单元数据获取、排序、过滤等选项;

•列定义主要有2个参数:aoColumnDefs 和 aoColumns ,两者基本一致,区别在于aoColumnDefs可以指定作用的列,而aoColumns需要每列逐一配置,与table实际列数保持一致;

•mRender:与mData基本一样,但少了改变目标值的特性,主要用于区分处理TD值的显示、过滤、排序;

•bSearchable, bSortable:设置列可否过滤、排序;

•sClass:设置列样式class;

回调函数选项:

•fnDrawCallback:每次表格重画时回呼,包括翻页、排序、过滤都会触发此function,可以在此加入需要处理的操作;

•fnPreDrawCallback:每次表格重画前回呼,可以在触发翻页、排序等操作之前进行预处理。

view:

1.首先需要进行Datatables的一些基础配置:

  “bServerSide”: true,

   “bProcessing”: true, //显示提示正在工作中

    “bPaginage”: true,

   “sPaginationType”: “two_buttons”,

2.“sAjaxSource” :用来向DataTable指定加载的外部数据源(如果想使用现有的数据,请使用aoData)可以简单的提供一个可以用来获得资料url或者JSON对象,该对象必须包含aaData,作为表格的数据源。

<?PHP
    echo "\"sAjaxSource\": \"/xxxx/xxx/",";
?>

3.“fnServerData” :此参数可以修改默认功能,从服务器获取数据($.getJSON),这样更适合应用程序。

"fnServerData": function (sSource, aoData, fnCallback) {
        $.ajax
             ({
                  "dataType": "json",

                  "type": "POST",

                  "url": sSource,

                  "data": aoData,

                  "success": fnCallback

              });

},

4. 新版本Datatables与旧版本的不同:

1). “fnRender”: function (setting) { }                "mRender": function (data, type, row) { } ;

2). "sPaginationType“: “two_buttons” or “full_numbers”

– simple - ‘Previous‘ and ‘Next‘ buttons only

–simple_numbers - ‘Previous‘ and ‘Next‘ buttons, plus page numbers

–full - ‘First‘, ‘Previous‘, ‘Next‘ and ‘Last‘ buttons

–full_numbers - ‘First‘, ‘Previous‘, ‘Next‘ and ‘Last‘ buttons, plus page numbers

5. "fnPreDrawCallback":  在每一个表格draw事件发生前调用该函数,通过返回false来取消draw事件其它任何的返回值,包括undefined都会导致draw事件的发生。

Controller:

Controller负责将把view传递过来的paging,sorting,searching的信息判断整理,通过model获取data list传送给view显示。

//Paging:

  $iDisplayStart = $this->input->get_post(‘iDisplayStart‘, true);

  $iDisplayLength = $this->input->get_post(‘iDisplayLength‘, true);

  if(isset($iDisplayStart) && $iDisplayLength != ‘-1‘)

        {
           $this->db->limit($this->db->escape_str($iDisplayLength),

         $this->db->escape_str($iDisplayStart));

        }

//Ordering:

  $sTable = ‘table_logs_event‘;

  $aColumns = array(‘id‘, ‘ack‘, ‘datetime‘, ‘category‘, ‘level‘, ‘dev_mac‘, ‘log_evt‘);

  $iSortCol_0 = $this->input->get_post(‘iSortCol_0‘, true);

  $iSortingCols = $this->input->get_post(‘iSortingCols‘, true);

if(isset($iSortCol_0))

        { for($j=0; $j<intval($iSortingCols); $j++)

            {   $iSortCol = $this->input->get_post(‘iSortCol_‘.$j, true);

                $bSortable = $this->input->get_post(‘bSortable_‘.intval($iSortCol), true);

                $sSortDir = $this->input->get_post(‘sSortDir_‘.$j, true);

       if($bSortable == ‘true‘)

          {  $this->db->order_by($aColumns[intval($this->db->escape_str($iSortCol))]  ,  

        $this->db- >escape_str($sSortDir));   }

} }

//Filtering:

$sSearch = $this->input->get_post(‘sSearch‘, true);

if(isset($sSearch) && !empty($sSearch))

        { for($i=0; $i<count($aColumns); $i++)

            { $bSearchable = $this->input->get_post(‘bSearchable_‘.$i, true);

              //单行排序

                if(isset($bSearchable) && $bSearchable == ‘true‘)

                {  if ( $criteria == "unread" )

              $this->db->or_like($aColumns[$i], $this->db->having(‘ack‘, 0)->escape_like_str($sSearch));

               else

                      $this->db->or_like($aColumns[$i], $this->db->escape_like_str($sSearch));

                }
        }
}

Model:

Model负责从数据表获取Data list,以及所有需要显示的信息。

$this->db->select(‘SQL_CALC_FOUND_ROWS ‘.str_replace(‘ , ‘, ‘ ‘, implode(‘, ‘, $aColumns)), false);

        if ( $criteria == "unread" )

        {  $this->db->where(‘ack‘, 0);  }

        $query = $this->db->get($sTable);

        $this->db->select(‘FOUND_ROWS() AS found_rows‘);

        $iFilteredTotal = $this->db->get()->row()->found_rows;

        $iTotal = $this->db->count_all($sTable);

        $output = array(

            "sEcho" => intval($sEcho),   //页面传递用以标记的参数

            “iTotalRecords” => $iTotal,   //总的数据条数

            “iTotalDisplayRecords” => $iFilteredTotal,  //获取显示在页面上的数据条数

            “aaData” => array()    //获取data list

        );   

声明:任何转载请声明出处,并附上作者名与链接,否则将依法追究侵权责任。

时间: 2024-10-27 19:31:59

jQuery Datatable(V1.10.7) server side processing的相关文章

kubeadm搭建kubernetes(v1.13.1)单节点集群

kubeadm是Kubernetes官方提供的用于快速部署Kubernetes集群的工具,本篇文章使用kubeadm搭建一个单master节点的k8s集群. 节点部署信息 节点主机名 节点IP 节点角色 操作系统 k8s-master 10.10.55.113 master centos7.6 k8s-node1 10.10.55.114 node centos7.6 节点说明 master:控制节点.kube-apiserver负责API服务,kube-controller-manager负责

SQL Server2012 T-SQL基础教程--读书笔记(8 - 10章)

SQL Server2012 T-SQL基础教程--读书笔记(8 - 10章) 示例数据库:点我 CHAPTER 08 数据修改 8.1 插入数据 8.1.1 INSERT VALUES 语句 8.1.2 INSERT SELECT 语句 8.1.3 INSERT EXEC 语句 8.1.4 SELECT INTO 语句 8.1.5 BULK INSERT 语句 8.1.6 标识列属性和序列对象 8.1.6.1 标识列属性 8.1.6.2 序列对象 8.2 删除数据 8.2.1 DELETE 语

判断一个数(小于10位)的位数。输入999,则输出 “它是个3位的数!”

判断一个数(小于10位)的位数. 输入999,则输出 “它是个3位的数!” -------------------------------------------------------------------------- public class HelloWorld{public static void main(String[] args){int num = 999;int count = 0; if (num >= 0  && num<=999999999){ wh

MediaWiki安装与配置(Ubuntu 10.4)

实验室准备发布一个网站,本来是准备外包给别人做的,后来自己调研了一下,发现也没有想象的复杂和困难,于是最近一周自己吭哧吭哧地把网站搭好了. 之所有使用Mediawiki,一是考虑到是以实验室发现,不想弄成那种商业气息深厚的网站:二是我们内容经常需要更新,所以必须好改. Mediawiki是网上众多Wiki引擎里的一个,应该是最大的一个,也是Wikipedia使用的引擎. 关于它的安装,网上已有众多帖子,不管是英文的还是中文的,在此我更侧重说一下高阶的配置(其实也是很基础的东西).大体思路,而不是

I/O重定向和管道——《Unix/Linux编程实践教程》读书笔记(第10章)

1.I/O重定向的概念与原因 及 标准输入.输出的标准错误的定义 所以的Unix I/O重定向都基于标准数据流的原理.三个数据了分别如下: 1)标准输入--需要处理的数据流 2)标准输出--结果数据流 3)标准错误输出--错误消息流 概念:所以的Unix工具都使用文件描述符0.1和2.标准输入文件的描述符是0,标准输出的文件描述符是1,而标准错误输出的文件描述符则是2.Unix假设文件描述符0.1.2已经被打开,可以分别进行读写操作. 通常通过shell命令行运行Unix系统工具时,stdin.

jquery.min.js v1.10.3版本autocomplete方法会在text前添加搜索出多少项的文本信息 要去除

http://stackoverflow.com/questions/13011127/how-to-remove-change-jquery-ui-autocomplete-helper-text How to remove/change JQuery UI Autocomplete Helper text? It seems that this is a new feature in JQuery UI 1.9.0, because I used JQuery UI plenty of ti

【谜客帝国】第139届微雨潇潇联想专场(2018.10.15)

[谜客帝国]第139届微雨潇潇联想专场(2018.10.15) 主持:瓷   计分:小白 1.本季重逢在帝国  只身东海挟春雷 乐天曲江之感怀 一段新愁染眉弯 5 今秋复来此 2.寒蛩轻唱送微凉  萧萧梧叶诉离情 白帝有语怜高洁 夜夜龙泉壁上鸣 4 此秋声也 3.人至中年心淡然  我言此季胜春潮 春愁夏恨冬烦忧 吟风作赋只伤春 4 不是悲秋 4.菊残犹有傲霜枝  立冬尚见黄叶飞 子夜歌里玉关情 竞雄洒血化碧涛 5 秋风吹不尽 5.轻寒最是可人天  貂裘换酒也堪豪 姑苏城外寒山寺 斋中结社咏海棠 

【谜客帝国】第140届兰萱联想专场(2018.10.30)

 [谜客帝国]第140届兰萱联想专场(2018.10.30) 主持:瓷   计分:默沫 1.沧海桑田.抱布贸丝.金兵撼山.吹灰之力(一字)易 2.云长拒豪宅.逃出囹圄来.红杏春意闹.破门阖又开(三字)关不住 3.浅尝辄止.滑稽出演.少年之行.不大喝茶(二字)小品 4.余高阳之苗裔兮.滕王阁主今何在.董卓废之立新君.古诗有云君不见(二字)少帝 5.匈奴鲜卑并川渝.顽皮妖宝憨态掬.因何前倨后恭也.似闻主动点炮语(二字)胡巴 6.正是阿堵物.三强皆出色.一掷千金者.实乃囊羞涩(三字)不差钱 7.上书帝

Hadoop集群(第10期)_MapReduce与MySQL交互

2.MapReduce与MySQL交互 MapReduce技术推出后,曾遭到关系数据库研究者的挑剔和批评,认为MapReduce不具备有类似于关系数据库中的结构化数据存储和处理能力.为此,Google和MapReduce社区进行了很多努力.一方面,他们设计了类似于关系数据中结构化数据表的技术(Google的BigTable,Hadoop的HBase)提供一些粗粒度的结构化数据存储和处理能力:另一方面,为了增强与关系数据库的集成能力,Hadoop MapReduce提供了相应的访问关系数据库库的编