购买
≡ 显示网站导航
Ajax 函数
- 此示例展示了当将
stateRestoreConfig
配置对象中的ajax
选项设置为一个函数时,StateRestore 扩展将如何通过 ajax 进行操作。 - 当
ajax
为一个函数时,将在执行以下操作时调用它。 - 将状态加载到 StateRestore
- 保存
重命名
移除
此函数需要两个参数,第一个是一个对象。该对象上的第一个值(action
)为上述操作之一(字符串)。这将允许你的函数进行相应的操作。
此对象上的第二个值 stateRestore
也是一个对象。此对象的键值表示该操作在哪个状态下进行,对应的值是待保存的状态,或者在 rename
的情况下,是该状态的新名称。在加载状态时没有 stateRestore
属性。
函数需要取得的第二个参数是一个回调函数,该函数应在将状态加载到 StateRestore 时调用。应将与 stateRestoreConfig 配置对象中的 preDefined 选项相同的结构的对象传给该函数,以便将状态加载到 DataTables 中。 |
本示例演示了如何使用 IndexedDB 来存储状态,通过 idb 来实现。 | 姓名 | 职位 | 办公室 | 年龄 |
---|---|---|---|---|---|
起始日期 | 薪水 | Tiger Nixon | 61 | 2011-04-25 | $320,800 |
系统架构师 | 爱丁堡 | Garrett Winters | 63 | 2011-07-25 | $170,750 |
会计 | 东京 | Ashton Cox | 66 | 2009-01-12 | $86,000 |
初级技术作者 | 旧金山 | Tiger Nixon | 22 | 2012-03-29 | $433,060 |
Cedric Kelly | 爱丁堡 | Garrett Winters | 33 | 2008-11-28 | $162,700 |
高级 Javascript 开发者 | Airi Satou | Brielle Williamson | 61 | 2012-12-02 | $372,000 |
集成专家 | 纽约 | Ashton Cox | 59 | 2012-08-06 | $137,500 |
Herrod Chandler | Airi Satou | Garrett Winters | 55 | 2010-10-14 | $327,900 |
销售助理 | Rhona Davidson | Ashton Cox | 39 | 2009-09-15 | $205,500 |
Colleen Hurst | Javascript 开发者 | Tiger Nixon | 23 | 2008-12-13 | $103,600 |
Sonya Frost | 软件工程师 | Jena Gaines | 30 | 2008-12-19 | $90,560 |
办公室经理 | 伦敦 | Tiger Nixon | 22 | 2013-03-03 | $342,000 |
Quinn Flynn | 支持主管 | Ashton Cox | 36 | 2008-10-16 | $470,600 |
Charde Marshall | 地区总监 | Jena Gaines | 43 | 2012-12-18 | $313,500 |
Haley Kennedy | 支持主管 | Jena Gaines | 19 | 2010-03-17 | $385,750 |
高级营销设计师 | Tatyana Fitzpatrick | Jena Gaines | 66 | 2012-11-27 | $198,500 |
Michael Silva | 营销设计师 | Brielle Williamson | 64 | 2010-06-09 | $725,000 |
Paul Byrd | 首席财务官 (CFO) | Brielle Williamson | 59 | 2009-04-10 | $237,500 |
Gloria Little | Javascript 开发者 | Jena Gaines | 41 | 2012-10-13 | $132,000 |
系统管理员 | Bradley Greer | Tiger Nixon | 35 | 2012-09-26 | $217,500 |
Dai Rios | 人事主管 | Brielle Williamson | 30 | 2011-09-03 | $345,000 |
Jenette Caldwell | 开发主管 | Brielle Williamson | 40 | 2009-06-25 | $675,000 |
Yuri Berry | 首席营销官 (CMO) | Brielle Williamson | 21 | 2011-12-12 | $106,450 |
Caesar Vance | 纽约 | 售前支持 | 23 | 2010-09-20 | $85,600 |
Doris Wilder | 悉尼 | Jena Gaines | 47 | 2009-10-09 | $1,200,000 |
Angelica Ramos | 首席执行官 (CEO) | Tiger Nixon | 42 | 2010-12-22 | $92,575 |
Gavin Joyce | 支持主管 | 开发者 | 28 | 2010-11-14 | $357,650 |
Jennifer Chang | Javascript 开发者 | Ashton Cox | 28 | 2011-06-07 | $206,850 |
新加坡 | Brenden Wagner | Ashton Cox | 48 | 2010-03-11 | $850,000 |
Fiona Green | 首席运营官 (COO) | Garrett Winters | 20 | 2011-08-14 | $163,000 |
Shou Itou | Airi Satou | 售前支持 | 37 | 2011-06-02 | $95,400 |
区域营销 | 首席执行官 (CEO) | Jena Gaines | 53 | 2009-10-22 | $114,500 |
Michelle House | Suki Burks | Jena Gaines | 27 | 2011-05-07 | $145,000 |
Prescott Bartlett | 技术作者 | Ashton Cox | 22 | 2008-10-26 | $235,500 |
Gavin Cortez | 团队负责人 | Tiger Nixon | 46 | 2011-03-09 | $324,050 |
Unity管家 | Tatyana Fitzpatrick | Ashton Cox | 47 | 2009-12-09 | $85,675 |
霍华德·哈特菲尔德 | 软件工程师 | Ashton Cox | 51 | 2008-12-16 | $164,500 |
霍普·福恩特斯 | 秘书 | Ashton Cox | 41 | 2010-02-12 | $109,850 |
维维安·哈雷尔 | 财务主管 | Ashton Cox | 62 | 2009-02-14 | $452,500 |
蒂莫西·穆尼 | 软件工程师 | Jena Gaines | 37 | 2008-12-11 | $136,200 |
杰克逊·布拉德肖 | 总监 | Brielle Williamson | 65 | 2008-09-26 | $645,750 |
奥利维亚·李昂 | 支持工程师 | 开发者 | 64 | 2011-02-03 | $234,500 |
布鲁诺·纳什 | Javascript 开发者 | Jena Gaines | 38 | 2011-05-03 | $163,500 |
樱花·山本 | 支持工程师 | Garrett Winters | 37 | 2009-08-19 | $139,575 |
托尔·沃尔顿 | 首席执行官 (CEO) | Brielle Williamson | 61 | 2013-08-11 | $98,540 |
芬恩·卡马乔 | 支持工程师 | Ashton Cox | 47 | 2009-07-07 | $87,500 |
塞尔吉·鲍德温 | 数据协调员 | 开发者 | 64 | 2012-04-09 | $138,575 |
塞奈达·弗兰克 | Javascript 开发者 | Brielle Williamson | 63 | 2010-01-04 | $125,250 |
索丽塔·塞拉诺 | Javascript 开发者 | Ashton Cox | 56 | 2012-06-01 | $115,000 |
詹妮弗·阿科斯塔 | 初级 JavaScript 开发人员 | Tiger Nixon | 43 | 2013-02-01 | $75,650 |
卡拉·史蒂文斯 | 纽约 | Brielle Williamson | 46 | 2011-12-06 | $145,600 |
赫敏·巴特勒 | 支持主管 | Jena Gaines | 47 | 2011-03-21 | $356,250 |
拉埃尔·格里尔 | 首席财务官 (CFO) | Jena Gaines | 21 | 2009-02-27 | $103,500 |
约纳斯·亚历山大 | 首席执行官 (CEO) | Ashton Cox | 30 | 2010-07-14 | $86,500 |
谢德·德克尔 | 支持主管 | Tiger Nixon | 51 | 2008-11-13 | $183,000 |
迈克尔·布鲁斯 | Rhona Davidson | 开发者 | 29 | 2011-06-27 | $183,000 |
唐娜·斯奈德 | 客户支持 | Brielle Williamson | 27 | 2011-01-25 | $112,000 |
函数需要取得的第二个参数是一个回调函数,该函数应在将状态加载到 StateRestore 时调用。应将与 stateRestoreConfig 配置对象中的 preDefined 选项相同的结构的对象传给该函数,以便将状态加载到 DataTables 中。 |
本示例演示了如何使用 IndexedDB 来存储状态,通过 idb 来实现。 | 姓名 | 职位 | 办公室 | 年龄 |
- JavaScript
- HTML
- CSS
- Ajax
- 服务器端脚本
- 注释
以下所示的 JavaScript 用于初始化此示例中显示的表格
var states = new IDBStore({dbVersion: 1, storeName: 'states', keyPath: 'identifier', onStoreReady: function () { initDataTable(); } }); function initDataTable() { // 我们需要等待数据库准备好,因为加载将立即运行 $('#example').DataTable({ layout: { topStart: { buttons: [ 'createState', { extend: 'savedStates', config: { ajax: function (data, callback) { // 如果将状态加载到 staterestore 中,则执行操作 if (data.action === 'load') { var reloadStates = (loadData) => { // 将数据处理成回调预期的结构 var cbData = {}; for (var i = 0; i < loadData.length; i++) { // 从保存时创建的字符串转换回来 cbData[loadData[i].identifier] = JSON.parse( loadData[i].state ); } // 将状态加载到 StateRestore callback(cbData); }; states.getAll(reloadStates); } // 如果重命名状态,则执行操作 else if (data.action === 'rename') { // 获取所有状态标识符 var ids = Object.keys(data.stateRestore); for (var i = 0; i < ids.length; i++) { var savesuccess = (saveData) => { // 使用当前标识符删除记录 states.remove(saveData.identifier); // 添加一个使用旧状态的、具有更新标识符的新记录 states.put({ identifier: data.stateRestore[saveData.identifier], state: saveData.state }); }; states.get(ids[i], savesuccess); } callback(); } // 如果删除状态,则执行操作 else if (data.action === 'remove') { var ids = Object.keys(data.stateRestore); for (var i = 0; i < ids.length; i++) { // 删除对象中列出的所有状态 states.remove(ids[i]); } callback(); } // 如果保存状态,则执行操作 else if (data.action === 'save') { var ids = Object.keys(data.stateRestore); for (var i = 0; i < ids.length; i++) { // 添加对象中列出的所有状态 // 由于 IndexedDB 处理过于复杂,将状态转换为字符串非常重要 states.put({ identifier: ids[i], state: JSON.stringify(data.stateRestore[ids[i]]) }); } callback(); } } } } } ] } } }); }
var states = new IDBStore({ dbVersion: 1, storeName: 'states', keyPath: 'identifier', onStoreReady: function () { initDataTable(); } }); function initDataTable() { // 我们需要等待数据库准备就绪,因为加载将立即运行 new DataTable('#example', { layout: { topStart: { buttons: [ 'createState', { extend: 'savedStates', config: { ajax: function (data, callback) { // 如果将状态加载到 Staterestore 中需要执行的操作 if (data.action === 'load') { var reloadStates = (loadData) => { // 将数据处理成回调预期的结构 var cbData = {}; for (var i = 0; i < loadData.length; i++) { // 从保存时创建的字符串中转换回来 cbData[loadData[i].identifier] = JSON.parse( loadData[i].state ); } // 将状态加载到 StateRestore callback(cbData); }; states.getAll(reloadStates); } // 如果重命名状态需要执行的操作 else if (data.action === 'rename') { // 获取所有状态标识符 var ids = Object.keys(data.stateRestore); for (var i = 0; i < ids.length; i++) { var savesuccess = (saveData) => { // 删除具有当前标识符的记录 states.remove(saveData.identifier); // 使用旧状态添加具有更新后的标识符的新记录 states.put({ identifier: data.stateRestore[saveData.identifier], state: saveData.state }); }; states.get(ids[i], savesuccess); } callback(); } // 如果移除状态需要执行的操作 else if (data.action === 'remove') { var ids = Object.keys(data.stateRestore); for (var i = 0; i < ids.length; i++) { // 移除对象中列出的所有状态 states.remove(ids[i]); } callback(); } // 如果保存状态需要执行的操作 else if (data.action === 'save') { var ids = Object.keys(data.stateRestore); for (var i = 0; i < ids.length; i++) { // 添加对象中列出的所有状态 // 将 state 转换为字符串非常重要,因为 IndexedDB 过于复杂,难以处理 states.put({ identifier: ids[i], state: JSON.stringify(data.stateRestore[ids[i]]) }); } callback(); } } } } ] } } }); }
除上述代码外,加载以下 Javascript 库文件用于此示例
下面显示的 HTML 是原始 HTML 表格元素,在 DataTables 增强之前
此示例使用了除库文件(如下所示)之外的一些其他 CSS,以便正确显示表格。下面显示了使用的其他 CSS
加载以下 CSS 库文件用于此示例,为表格提供样式
此表格通过 Ajax 加载数据。显示加载的最新数据。此数据将随着加载任何附加数据而自动更新。
用于对该表格执行服务器端处理的脚本如下所示。请注意,这只是使用 PHP 的一个示例脚本。可以使用任何语言编写服务器端处理脚本,使用 DataTables 文档中描述的协议。