亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

JS Datatables插件server-side方式處理分頁的示例代碼段

2024-04-27 15:10:06
字體:
來源:轉載
供稿:網友

Author: Kagula

測試日期:2017-02-07

測試環境:

[1]Chrome 54.x

[2]Metronic 4.7(這是我們JS代碼依賴的模板庫)

正文

html代碼段

                            <div class="portlet-body">                                <div class="table-scrollable" style="padding: 16pt">                                    <table class="display" id="mainTable">                                        <thead>                                        <tr>                                            <th> # </th>                                            <th> 報警類型  </th>                                            <th> 報警時間 </th>                                            <th> 處理人員 </th>                                        </tr>                                        </thead>                                        <tbody>                                        </tbody>                                    </table>                                </div>                            </div>

JS代碼段

        var lang = {            "sPRocessing": "處理中...",            "sLengthMenu": "每頁 _MENU_ 條記錄",            "sZeroRecords": "沒有匹配結果",            "sInfo": "當前顯示第 _START_ 至第 _END_ 條記錄,共 _TOTAL_ 條記錄。",            "sInfoEmpty": "當前顯示第 0 至 0 條記錄,共 0 條記錄",            "sInfoFiltered": "(由 _MAX_ 項結果過濾)",            "sInfoPostFix": "",            "sSearch": "搜索:",            "sUrl": "",            "sEmptyTable": "表中數據為空",            "sLoadingRecords": "載入中...",            "sInfoThousands": ",",            "oPaginate": {                "sFirst": "首頁",                "sPrevious": "上頁",                "sNext": "下頁",                "sLast": "末頁",                "sJump": "跳轉"            },            "oAria": {                "sSortAscending": ": 以升序排列此列",                "sSortDescending": ": 以降序排列此列"            }        };        myTable = $('#mainTable').dataTable( {            language:lang,  //中文提示            //"lengthChange": false,//不讓用戶選擇每頁item數量            "aLengthMenu": [[7, 25, 50, -1], [7, 25, 50, "全部"]],//讓用戶選擇頁面記錄數量            "iDisplayLength": 7, //默認頁面中的記錄數量。            "bFilter": true, //過濾功能            //"bSort": false, //禁用排序            "aoColumnDefs": [ { "bSortable": false, "aTargets": [ 0 ] }],//設置第一列不可排序            //"aaSorting": [[ 0, "desc" ]], //設置第一列默認降序            "serverSide" : true,//服務端進行分頁處理            "Ajax" : {                data : function(d) {                    console.log('custom request');                    //默認會有                    //start,表示要從第幾行記錄開始顯示,例如0表示要取第一行記錄開始的頁面。                    //length,表示要取的記錄數量,即頁面大小。                    //[order][0][column]參數為0表示第一列,1表示第二列,[order][0][dir]參數為asc,表示要求服務端返回所指向列升序的表。                    //接住Shift可以選擇多列排序,會添加下面的鍵值對請求                    //[order][1][column]參數為2表示第三列,3表示第四列,[order][1][dir]參數為asc,表示要求服務端返回所指向列升序的表。                    //達到多列排序的目的。                    //search[regex]的默認值為"false",search[value]里存放的是待搜索字符串,如果沒有東西要Search則里面是空字符串。                    return $.extend({}, d, {                        'data' : '{}'//自己增加個data請求參數                    })                },                dataSrc: function (json) {                    console.log('process response data from server side before display.');                    return json.data;                },                url : "/queryWarningInfo.do",                type : "POST",                crossDomain: true            },            columns: [                { "data": "idWarningInfo","width":24 },//這里的寬度指的是盡可能小的寬度                { "data": "warningType",                    render : function(data, type,row) {                    if (data == '0') {                        return "<span class=/"label label-sm label-warning/">入侵</span>";                    } else if(data == '1') {                        return "<span class=/"label label-sm label-danger/">設備故障</span>";                    } else if(data == '2') {                        return "設備離線";                    }                    return '未知';                    },                    "width":96                },                { "data": "eventTime" },                { "data": "StaffName","width":32 }            ]        } );    }    $('#mainTable tbody').on( 'click', 'tr', function () {        if ( $(this).hasClass('selected') ) {            $(this).removeClass('selected');        }        else {            myTable.$('tr.selected').removeClass('selected');            $(this).addClass('selected');            //取選中行的信息            var aData = myTable.fnGetData(this); // get datarow            if (null != aData)  // null if we clicked on title row            {                console.log(aData.idWarningInfo);            }        }    } );

服務端返回的JSON字符串

{    "code": "0",    "data": [        {            "StaffName": "kagula",            "deviceIndex": "0",            "eventTime": "2017-01-21 07:01:37",            "idWarningInfo": "1",            "portIndex": "0",            "warningType": "0"        },        {            "StaffName": "kagula",            "deviceIndex": "0",            "eventTime": "2017-01-21 07:01:48",            "idWarningInfo": "2",            "portIndex": "1",            "warningType": "0"        },        {            "StaffName": "kagula",            "deviceIndex": "1",            "eventTime": "2017-01-21 07:02:16",            "idWarningInfo": "3",            "portIndex": "0",            "warningType": "0"        },        {            "StaffName": "kagula",            "deviceIndex": "1",            "eventTime": "2017-01-21 07:02:16",            "idWarningInfo": "4",            "portIndex": "1",            "warningType": "0"        },        {            "StaffName": "",            "deviceIndex": "1",            "eventTime": "2017-02-04 01:03:33",            "idWarningInfo": "5",            "portIndex": "1",            "warningType": "0"        },        {            "StaffName": "",            "deviceIndex": "1",            "eventTime": "2017-02-04 05:46:49",            "idWarningInfo": "6",            "portIndex": "1",            "warningType": "1"        },        {            "StaffName": "",            "deviceIndex": "1",            "eventTime": "2017-02-04 05:46:59",            "idWarningInfo": "7",            "portIndex": "1",            "warningType": "2"        }    ],    "iTotalDisplayRecords": "100",    "iTotalRecords": "100",    "message": "success"}

HTML Render效果

C++輔助代碼

代碼段一

	class CJSDataTablesPluginReqData{	public:		CJSDataTablesPluginReqData(std::map<std::string, std::string> &mapReqArgs,			std::vector<std::string> &vecDBFieldName);//在DB中的字段名,數量同前端表中顯示的列		//返回適合SQLite的SQL子句		std::string getWhereClause() { return _clauseWhere; }		std::string getOrderbyClause() { return _clauSEOrderby; }		std::string getLimitClause() { return _clauseLimit; }		bool isOK() {			if (_clauseOrderby.empty() == false && _clauseLimit.empty() == false)			{				return true;			}			return false;		}	private:		std::string _clauseWhere;		std::string _clauseOrderby;		std::string _clauseLimit;	};

代碼段二

	CJSDataTablesPluginReqData::CJSDataTablesPluginReqData(std::map<std::string, std::string> &mapReqArgs,		std::vector<std::string> &vecDBFieldName)	{		try		{			//order by			//最多支持16個字段			char szBuf[1024];			std::string fieldName;			std::string fieldDir;			StringBuilder<char> sbClauseOrderby;			int index;			for (int i = 0; i < 16; i++)			{				memset(szBuf, sizeof(szBuf), 0);				sprintf_s(szBuf, "order[%d][column]", i);				if (mapReqArgs.find(szBuf) == mapReqArgs.end())					break;				index = boost::lexical_cast<int>(mapReqArgs[szBuf]);				if (index >= vecDBFieldName.size())					break;				fieldName = vecDBFieldName[index];				memset(szBuf, sizeof(szBuf), 0);				sprintf_s(szBuf, "order[%d][dir]", i);				if (mapReqArgs.find(szBuf) == mapReqArgs.end())					break;				fieldDir = mapReqArgs[szBuf];				if (_clauseOrderby.empty())				{					sbClauseOrderby.Append(" order by ");				}				else				{					sbClauseOrderby.Append(",");				}//if				sbClauseOrderby.Append(fieldName);				sbClauseOrderby.Append(" ");				sbClauseOrderby.Append(fieldDir);			}//for			_clauseOrderby = sbClauseOrderby.ToString();			//where clause			_clauseWhere = [&mapReqArgs,vecDBFieldName]()->std::string{				std::string search_value;				if (mapReqArgs.find("search[value]") == mapReqArgs.end())					return "";				search_value = mapReqArgs["search[value]"];				if (search_value.empty())					return "";				StringBuilder<char> sbClauseWhere;				for (int i = 0; i < vecDBFieldName.size(); i++)				{					if (i == 0)					{						sbClauseWhere.Append("where (");					}					else					{						sbClauseWhere.Append(" or ");					}					sbClauseWhere.Append(vecDBFieldName[i]);					sbClauseWhere.Append(" like '%");					sbClauseWhere.Append(search_value);					sbClauseWhere.Append("%'");				}				sbClauseWhere.Append(")");				return sbClauseWhere.ToString();			}();			//limit clause			int limit;			int offset;			if (mapReqArgs.find("start") == mapReqArgs.end())				return;			if (mapReqArgs.find("length") == mapReqArgs.end())				return;			offset = boost::lexical_cast<int>(mapReqArgs["start"]);			limit = boost::lexical_cast<int>(mapReqArgs["length"]);			if (limit <= 0)				return;			memset(szBuf, sizeof(szBuf), 0);			sprintf_s(szBuf, "limit %d offset %d", limit, offset);			_clauseLimit = szBuf;		}		catch (boost::bad_lexical_cast &e)		{					}//catch	}//function

 

參考資料

https://datatables.net/


上一篇:MVC靜態化頁面

下一篇:JavaScript預解析

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合天天狠天天透天天伊人| 992tv在线成人免费观看| 国产精品影片在线观看| 91精品免费久久久久久久久| 国内精品一区二区三区四区| 欧美一级视频免费在线观看| 日本中文字幕久久看| 欧美日韩亚洲一区二| 精品久久久久久国产91| 久久九九国产精品怡红院| 亚洲尤物视频网| 色青青草原桃花久久综合| 亚洲一区二区免费| 色综合久久久久久中文网| 亚洲国产精品99久久| 成人欧美在线观看| 在线成人免费网站| 国产精品大片wwwwww| 久热精品视频在线| 亚洲色图校园春色| 国产精品video| 日韩动漫免费观看电视剧高清| xxxxxxxxx欧美| 亚洲www在线| 精品久久久久久久久久久| 欧美性xxxx极品hd满灌| 欧美综合第一页| 欧美最近摘花xxxx摘花| 日韩中文字幕免费视频| 欧美激情欧美激情| 97久久精品人搡人人玩| 亚洲最新av在线| 久久大大胆人体| 久久综合色影院| 久久精品久久久久电影| 91色琪琪电影亚洲精品久久| 日韩av在线最新| 亚洲第一区中文字幕| 91在线色戒在线| 久久精品成人欧美大片古装| 成人黄色生活片| 午夜免费日韩视频| 欧美激情国内偷拍| 久久精品亚洲94久久精品| 日韩美女免费线视频| 日韩精品中文字幕视频在线| 国产精品久久久久久久久免费看| 欧美日韩xxx| 欧美黄色免费网站| 91深夜福利视频| 日韩精品福利网站| 亚洲天堂男人的天堂| 精品一区精品二区| 日韩精品中文字幕视频在线| 在线丨暗呦小u女国产精品| 97超级碰在线看视频免费在线看| 精品女同一区二区三区在线播放| 国产精品亚洲欧美导航| 精品成人在线视频| 欧美最顶级丰满的aⅴ艳星| 久热精品视频在线| 亚洲午夜小视频| 草民午夜欧美限制a级福利片| 91久久精品美女| 成人性生交xxxxx网站| 91中文在线视频| 国产精品午夜一区二区欲梦| 欧美性色xo影院| 亚洲日本中文字幕免费在线不卡| 欧美美女18p| 欧美精品久久久久久久久久| 国产精品久久久久久久电影| 亚洲资源在线看| 国产成人激情小视频| 欧美国产视频一区二区| 68精品国产免费久久久久久婷婷| 日本19禁啪啪免费观看www| 成人免费网站在线看| 国产成+人+综合+亚洲欧美丁香花| 国产精品一区久久久| 精品国产依人香蕉在线精品| 欧美做受高潮电影o| 在线视频日本亚洲性| 欧美美最猛性xxxxxx| 欧美贵妇videos办公室| 久久福利视频导航| 亚洲精品aⅴ中文字幕乱码| 情事1991在线| 亚洲国产一区自拍| 亚洲美女性视频| 亚洲另类图片色| 68精品久久久久久欧美| 久久久精品久久久久| 中文字幕不卡在线视频极品| 久久亚洲精品网站| 国产免费一区二区三区在线观看| 欧美精品videos性欧美| 搡老女人一区二区三区视频tv| 成人激情电影一区二区| 77777亚洲午夜久久多人| 国产精品亚洲激情| 亚洲欧美国产一本综合首页| 欧美国产日韩中文字幕在线| 欧美日韩国产精品一区二区不卡中文| 欧美激情精品在线| 久久亚洲电影天堂| 色偷偷av一区二区三区| 日韩欧美中文在线| 91精品国产99久久久久久| 一区二区在线视频| 国产不卡精品视男人的天堂| 欧美日韩精品中文字幕| 91人成网站www| 亚洲国产日韩精品在线| 国产日韩欧美自拍| 欧美日韩国产页| 精品国偷自产在线| 91牛牛免费视频| 中文.日本.精品| 欧美电影免费观看电视剧大全| 亚州国产精品久久久| 日韩av中文字幕在线免费观看| 欧美成人sm免费视频| 久久久免费电影| 亚洲欧美另类自拍| 日韩毛片在线看| 欧美精品www在线观看| 亚洲中国色老太| 国产精品色午夜在线观看| 俺去啦;欧美日韩| 国产精品一区二区久久精品| 成人激情视频在线观看| 亚洲a区在线视频| 亚洲性夜色噜噜噜7777| 欧美高清视频在线| 欧美国产视频日韩| 日韩大陆欧美高清视频区| 午夜精品久久久久久99热软件| 91精品国产高清久久久久久| 日韩中文在线不卡| 亚洲一区二区三区四区视频| 国产精品久久久久久久7电影| 日本亚洲欧美成人| 九色精品美女在线| 久久99国产精品久久久久久久久| 欧美午夜宅男影院在线观看| 91综合免费在线| 国产精品久久久久999| 亚洲无线码在线一区观看| 欧美激情综合色综合啪啪五月| 亚洲精品在线不卡| 黄色一区二区三区| 亚洲激情 国产| 91美女片黄在线观| 5278欧美一区二区三区| 亚洲免费人成在线视频观看| 欧美性xxxx18| 亚洲国产精品小视频| 欧美高清电影在线看| 久久99久国产精品黄毛片入口| 亚洲精品视频免费| 欧美一级bbbbb性bbbb喷潮片| 国产视频精品自拍| 夜色77av精品影院|