5

我有一个通过 ajax 请求加载数据的 JQuery 数据表。表格旁边有一个表格,可以让用户过滤服务器上的结果。当用户更改过滤器表单时,我使用新的过滤器数据调用 fnReloadAjax(),然后使用新的过滤结果重新绘制表格。

我遇到的问题是分页坚持,即使表格不再有足够的项目到达当前页面。因此,如果表格最初有 20 个项目,并且用户在第 2 页(每页 10 个项目),并且他们更改了过滤器以便只返回 5 个项目,则表格不显示任何项目并在底部显示:

Showing 11 to 5 of 5 entries

即使只有一页的数据,它仍然在第 2 页上。

我发现了许多关于尝试保留当前页面/行的帖子,但没有一个显示将分页重置为第一页的简单方法。最简单的方法是什么?

为了清楚起见,这是我的代码的简化版本:

$("#mytable").dataTable({
    bStateSave: false,
    fnServerData: function (sSource, aoData, fnCallback) {
        return $.ajax({
            type: "POST",
            url: url,
            data: {filter: filterValue}
        });
    }
});

$("#myForm").submit(function(e) {
    table.fnReloadAjax();
    return false;
});
4

3 回答 3

4

您可以在重新加载后显式跳转到第一页,请参阅http://datatables.net/api#fnPageChange

$("#myForm").submit(function(e) {
    table.fnPageChange(0);
    table.fnReloadAjax();
    return false;
});
于 2013-09-04T20:49:17.667 回答
1

接受@Gigo 给出的解决方案:

$("#myForm").submit(function(e) {
    table.fnPageChange(0);
    table.fnReloadAjax();
    return false;
});

这有一个问题,它向服务器发送了两个请求。

我发现 fnPageChange 是第一次这样做的。

$("#myForm").submit(function(e) {
    table.fnPageChange(0);
    return false;
});
于 2013-11-01T14:28:39.393 回答
1

这可以通过实现保存和加载数据表状态以及重置起点的功能来解决 - 示例如下

 "fnStateSave": function (oSettings, oData) {  
  localStorage.setItem( 'MyDataTable', JSON.stringify(oData) ); 
   },
  "fnStateLoad": function (oSettings) {
      var settings = JSON.parse( localStorage.getItem('MyDataTable') );
      settings.iStart = 0;  // resets to first page of results
      return settings
  },

当重新加载表时调用 fnStateLoad - 例如应用新过滤器 - 分页重置为开始。

每次检索下一页结果时都会调用 fnStateSave

这种方法避免了额外请求返回服务器的开销

于 2016-01-20T08:51:05.317 回答