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

标签 javascript jquery ajax 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
     }
} );

这是 Spring Controller :

@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;
}

问题是,当我更改表中的页面时,它会在页面上提醒正确的 pageNo(在 JavaScript 中),但是在 spring Controller 中,我总是将初始值分配给变量 pageNo 而不是当前页码。

如何将 pageNo 动态传递给 spring Controller ?感谢您的帮助。

编辑:

我像这样更新了 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" }
    ]
});

但是它给我一个错误:

DataTables warning: table id=propertyTable - Cannot reinitialise DataTable.

最佳答案

DataTables 已经在请求中发送参数 startlength,您可以使用它们来计算页码,请参阅 Server-side processing .

如果你还需要有带页码的URL结构,你可以使用下面的代码:

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

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

关于javascript - 如何在 Ajax 请求中发送当前页码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30975859/

相关文章:

javascript - 根据返回新数组javascript的另一个数组过滤对象数组

java - 如何计算起始值和结束值之间存在的元素?

javascript - 滚动时突出显示目录。在 jquery 1.10.1 上工作正常,但在 3.0.0 上不行

javascript - 当表中有 <select> 下拉列表时,如何对表进行字符串化 (JSON)?

javascript - 为什么 d3.json 不随请求发送 cookie?

javascript - 如何在页面加载时从表加载一定数量的行,并且仅在用户加载它们时才加载更多行?

javascript - Mithril.js 具有多个 GET 请求

javascript - 无需 jQuery 即可获取 jQuery.data 功能

javascript - 如何在 JavaScript 文件中包含库?

javascript - 如何在每个元素上调用 jquery.each 循环遍历数组?