一、動態定義列頭 在ajax中,用datatable再去重新配置列頭,當然傳回的數據中,要有對應放列頭的鍵值對 我自定義了Mock數據,用於前端自己交互。 其中,rowdata用於存放傳回的數據,col_define用於存放定義的列頭,targets表示第幾列,title表示列名,data是為了對應 ...
一、動態定義列頭
在ajax中,用datatable再去重新配置列頭,當然傳回的數據中,要有對應放列頭的鍵值對
我自定義了Mock數據,用於前端自己交互。
其中,rowdata用於存放傳回的數據,col_define用於存放定義的列頭,targets表示第幾列,title表示列名,data是為了對應data下的rowdata數據
$.mockjax({ url: "/salary_import", status: 200, responseText: { 'code': 'ok', 'Msg': '小垃圾', 'data': { 'rowdata': [ { '名字': '呆頭鵝', '身份證': 123456789451, 'exist': 0, '基本工資': 1000, '職位工資': 100, '績效工資': 10, '應扣工資': 2000 }, { '名字': '小學雞', '身份證': 12123214124, 'exist': 0, '基本工資': 2000, '職位工資': 300, '績效工資': 30, '應扣工資': 3000 }, { '名字': '奔比', '身份證': 123456789451, 'exist': 0, '基本工資': 1000, '職位工資': 100, '績效工資': 10, '應扣工資': 2000 }], 'col_define': [{ 'targets': 0, 'data': '名字', 'title': '名字' }, { 'targets': 1, 'data': '身份證', 'title': '身份證' }, { 'targets': 2, 'data': '基本工資', 'title': '基本工資' }, { 'targets': 3, 'data': '職位工資', 'title': '職位工資' },{ 'targets': 4, 'data': '績效工資', 'title': '績效工資' },{ 'targets': 5, 'data': '應扣工資', 'title': '應扣工資' }] } } });
那麼你ajax交互的時候,就可以
var opts = [];
$.ajax({ url: '/salary_import', type: 'POST', async: false, cache: false, dataType: 'json', beforeSend: function () { }, success: function (res) { if ('ok' === res['code']) { alert('解析完成!'); console.log('返回數據 是', res['data']); opts.data = res['data']['rowdata']; // opts.data = res.data.rowdata; console.log(opts.data); opts.columns = res['data']['col_define']; var excel = $('#salary_excel_table').DataTable({ 'language': lan, "dom": 'lB<"top"f><"toolbar">rt<"bottom"ip><"clear">', "paging": true, "lengthChange": true, "info": true, 'destroy': true, "deferRender": true, 'columns': opts.columns, 'data': opts.data, });
不知道是否是插件之間相容性問題,反正,如果我直接先在外面初始化了datatable,給opts先賦了初始配置值,然後再在ajax下,通過改變對應變數再賦值回datatable下的配置文件,即
var excel = $('#salary_excel_table').DataTable(opts);會莫得什麼卵用,因為我百度上都是這樣教的,可能單單是我的問題吧,只能重新寫份自定義配置,會保險很多,這裡就是動態定義列頭了,通過後臺給的數據,直接描繪前端的列頭
二、給某行添加事件
var person=$('#person_table').Datatable(..........);//裡面的配置自己去配置你們想要後臺給你們的data,格式就不教了
$("#person_table").on("click","tr",function(){ var table_data =person.row(this).data(); console.log(table_data); var department=table_data.department; var id=table_data.id; var name=table_data.name; $.ajax({ url:'/point', type:'POST', data:{ department:department, id:id, name:name }, cache: false, async: true, success: function (result) { console.log(result); var m = $('#money_table').DataTable(); reloadData(m, result['data']['data_money']); }, error: function () { alert('德瑪西亞') } }) });
function reloadData(table, dataList) {
var currentPage = table.page();
table.clear();
table.rows.add(dataList);
table.page(currentPage).draw(false);
};
點擊Datatable下某行,就能夠獲取到該行數據,放好id,姓名和部門,然後用ajax將這三個數據發給後臺,讓後臺返回給你需要的數據,去渲染另一個datatable(這裡你隨便怎樣都可以,也可以做跳轉啥的),重要的是前後端那些數據格式要對好,不然都會出現列數據對不到的錯誤,還有就是這個reloadData很重要!
三、初始顯示空數據
這個就更簡單了,你一開始配置表格的時候嘛,可以不寫ajax,但是寫好列行數據格式,反正沒人傳給你的會,就是空,等你點擊什麼或者導入什麼的時候,success了再ajax到對應的表的行數據就行了
(所以看清楚,一開始再DataTable里沒有AJAX數據獲得的話,就是沒有行數據的,會顯示沒有數據,但是列頭還是存在的,所以下麵沒有ajax)
var money_table = $('#money_table').DataTable({ 'language': lan, "dom": 'lB<"top"f><"toolbar">rt<"bottom"ip><"clear">', "paging": true, "lengthChange": true, "info": true, "order": [ [0, "desc"] ], "columnDefs": [ { "title": "應發", "targets": 0 }, { "title": "應扣", "targets": 1 }, { "title": "實發", "targets": 2 }, { "title": "個稅", "targets": 3 }, { "title": "年月", "targets": 4 }, { "title": "功能", "targets": 5 , "render": function (data, type, full, meta) { if (data) { return express_html } else { return '' } } } ], 'columns':[ {'data':'yf'}, {'data':'yk'}, {'data':'sf'}, {'data':'gs'}, {'data':'yy-mm'}, {'data':null} ], 'destroy':true, "deferRender": true });