如何在Ajax请求中发送当前页码

Nar*_*dra 10 javascript ajax jquery spring-mvc datatables

我使用jQuery DataTable在表中显示大量数据.我正在Ajax请求上获取数据页面,如下所示:

var pageNo = 1;
$('#propertyTable').dataTable( {
    "processing": true,
    "serverSide": true,
    "ajax": "${contextPath}/admin/getNextPageData/"+pageNo+"/"+10,
    "columns": [
        { "data": "propertyId" },
        { "data": "propertyname" },
        { "data": "propertyType" },
        { "data": "hotProperties" },
        { "data": "address" },
        { "data": "state" },
        { "data": "beds" },
        { "data": "city" },
        { "data": "zipCode" }
    ],
    "fnDrawCallback": function () {
        pageNo = this.fnPagingInfo().iPage+1;
        alert(pageNo); // this alerts correct page
     }
} );
Run Code Online (Sandbox Code Playgroud)

这是弹簧控制器:

@RequestMapping(value="/getNextPageData/{pageNo}/{propertyPerPage}")
public @ResponseBody PropertyDatatableDto getNextPageData(@PathVariable Integer pageNo, @PathVariable Integer propertyPerPage) {
    System.out.println("called");
    System.out.println(pageNo); // this always prints 1, what i need is current pageNo here


    PropertyDatatableDto datatableDto = new PropertyDatatableDto();
    //datatableDto.setDraw(1);
    datatableDto.setRecordsTotal(100);
    datatableDto.setRecordsFiltered(100);
    datatableDto.setData(adminService.getAllPropertyList());
    return datatableDto;
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我在表格中更改页面时,它会pageNo在页面上警告正确(在JavaScript中),但在spring控制器中,我总是得到分配给变量的初始值,pageNo而不是当前页码.

如何pageNo动态传递给弹簧控制器?任何帮助表示赞赏.

编辑:

我像这样更新了JavaScript:

    var oSettings = $('#propertyTable').dataTable().fnSettings();
    var currentPageIndex = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1; 

$('#propertyTable').dataTable({
    "processing": true,
    "serverSide": true,
    "ajax": "${contextPath}/admin/getNextPageData/"+currentPageIndex+"/"+10,
    "columns": [
        { "data": "propertyId" },
        { "data": "propertyname" },
        { "data": "propertyType" },
        { "data": "hotProperties" },
        { "data": "address" },
        { "data": "state" },
        { "data": "beds" },
        { "data": "city" },
        { "data": "zipCode" }
    ]
});
Run Code Online (Sandbox Code Playgroud)

但它给了我一个错误:

DataTables警告:table id = propertyTable - 无法重新初始化DataTable.

Gyr*_*com 18

DataTables已经发送参数,start并且length在您可以用来计算页码的请求中,请参阅服务器端处理.

如果您仍需要具有页码的URL结构,则可以使用以下代码:

"ajax": {
   "data": function(){
      var info = $('#propertyTable').DataTable().page.info();

      $('#propertyTable').DataTable().ajax.url(
          "${contextPath}/admin/getNextPageData/"+(info.page + 1)+"/"+10
      );
   }
},
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,获取页码的计算是:`data.start/data.length + 1` (6认同)