javascript - 如何从数据表滚动扩展中获取显示行?

标签 javascript events datatable callback datatables

使用 Scroller 时数据表的扩展,您没有分页,但所有行都在一个滚动条中。我想知道,向下滚动表格后会触发什么事件,例如请参阅 100 行中的第 50-60 行。我还需要知道如何从数据表中获取这 10 行。我正在使用最新版本。非常感谢。

这是从 Datatable.net 中的当前页面获取行的方法,无需 Scroller延伸。

drawCallback: function (settings) {
    var api = new $.fn.dataTable.Api(settings);

    // Output the data for the visible rows to the browser's console
    console.log(api.rows({ page: 'current' }).data().length);
}

Update 1: My Init of Scroller table:

initScrollerTable = function ($table, url, inclFilter, dataTableOptionsSpecific) {
    $.ajax({
        method: "POST",
        url: url,
        data: dataParameterHelper.getCommonData(),
        dataType: "json"
    })
    .done(function (rows) {
        var dataTableOptions = $.extend(
            {},
            { data: rows },
            dataTableOptionsSpecific
        );

        initTable($table, inclFilter, dataTableOptions);
    });
};

Update 2 Deeper elaborating on the origional reason for the question to clarify.

好吧,长话短说。我的表包含 26000 行,我花了 7 分钟才加载它。它包含大量数据库调用,并且 JSON 大小为 21MB!我想优化它。 第一次尝试:我将 json 降至绝对最小值,将其降至 1.5MB,但仍然花费了近 7 分钟。在第二次测试中,它包含所有 html,带有硬编码的数字/字符串,我执行了 0 次数据库调用。仅用了 3.5 秒!。昨天我不知道我只需要专注于优化对数据库的调用。 昨天,当我发布原始查询时,我的想法是填充表而不从数据库中提取任何数据,而是以一种延迟加载的方式加载它们。假设我显示了前 10 行。每列有 3 列,我需要为每个单元格调用数据库,总共 30 次。因此,我们的想法是对 (10) 个当前行发出 30 个请求,并将占位符替换为实际值。如果你明白的话。我仍然会比 26.000 * 3 DB 调用更好:) 为此,我需要连接一个事件来获取 10 个当前行 ID,然后我可以循环发出 30 个 AJAX 请求。所以也许这就是我需要的滚动事件,如果有这样的人的话。 但我不知道这是否是一个好主意。通常,“好”想法只是在您学习最佳实践之前/之前才“好”:) 我想我将开始专注于通过一些内部联接来减少数据库调用,检索一个大结果集,我可以在 15 秒内循环并填充所有 26.000(以及后来的 50.000)行!

最佳答案

SOLUTION

使用xhr处理 Ajax 请求的事件和 page.info()检索有关表的信息,如下所示。

请注意,在初始化表以处理初始 Ajax 请求之前,需要附加事件处理程序。

$('#example').on('xhr.dt', function ( e, settings, json, xhr ) {
    var api = new $.fn.dataTable.Api(settings);
    var info = api.page.info();

    console.log('Data has been loaded', info);
});

DEMO

参见this jsFiddle用于代码和演示。

关于javascript - 如何从数据表滚动扩展中获取显示行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32510268/

相关文章:

javascript - 使用 JavaScript 和 jQuery 生成 HTML - JavaScript 不执行?

javascript - jQuery jeditable错误对象[对象对象]没有方法 'editable'

php - SQL SELECT、AND、不等于查询中的一些问题

javascript - 如何在 Google Apps 脚本中异步运行方法?

Java 应用程序事件 : Difference between @EventListener annotation and ApplicationListener interface

c# - 提高 DataTable.Load() 性能的方法?

R Shiny 从 numericInput 数据表列中提取值

javascript - 无法从事件处理程序 "this"对象获取属性

javascript - customInput 未在 react-datepicker 中返回所选日期

excel - 另一个类(class)的 VBA 提升事件