购买

显示网站导航

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 文档中描述的协议

      其他示例