Javascript 如何在JQuery数据表中重置分页

Javascript 如何在JQuery数据表中重置分页,javascript,jquery,pagination,datatables,jquery-datatables,Javascript,Jquery,Pagination,Datatables,Jquery Datatables,我有一个JQuery数据表,它通过ajax请求加载数据。表旁有一个表单,允许用户在服务器上筛选结果。当用户更改过滤器表单时,我使用新的过滤器数据调用fnReloadAjax(),然后使用新的过滤结果重新绘制表 我遇到的问题是,即使表中不再有足够的项到达当前页面,分页仍然会粘住。因此,如果表格最初有20个项目,而用户在第2页(每页10个项目),并且他们更改了过滤器,因此只返回5个项目,那么表格将不显示任何项目,并在底部显示: Showing 11 to 5 of 5 entries 即使只有足够

我有一个JQuery数据表,它通过ajax请求加载数据。表旁有一个表单,允许用户在服务器上筛选结果。当用户更改过滤器表单时,我使用新的过滤器数据调用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;
});

您可以在重新加载后显式跳转到第一页,请参阅


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

$("#myForm").submit(function(e) {
    table.fnPageChange(0);
    table.fnReloadAjax();
    return false;
});
这有一个问题,它向服务器发送两个请求

我发现fnPageChange在第一时间就做到了这一点

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

这可以通过实现保存和加载datatable状态的函数以及重置起点来解决-下面的示例

 "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


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

啊,是的,这就是我要寻找的功能。但是,我必须首先更改页面,以防止返回ajax调用时出现计时问题,因此将table.fnPageChange(0)放在table.fnReloadAjax()之前。谢谢很高兴它成功了,我编辑了我的答案,使之能像你说的那样工作。这个解决方案的问题是它发送了两个请求。一个用于更改页面,另一个用于重新加载数据。
 "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
  },