数据表服务器端处理分页问题

Datatables server side processing pagination issue

我正在努力让数据table与我的休息API一起发挥良好的作用。让我先说明一下:“REST api 不会更改!.

当使用服务器端处理时,datatables 想要发送特定的查询参数并期望返回特定的格式。对我来说,这是公牛。没有人愿意修改他们的后端以匹配第三方库的约定(尽管我想,提供默认值很棒)。

我已经像这样设置了 table:

{
    "processing": true,
    "serverSide": true,
    "ajax": {
      "url": "/api/customers/",
      "dataSrc": "results",
      "data": function (data, settings) {
        // Modify query parameters to match my API
        data.page = ...
        data.page_size = ...
        return data
      }
    },
    ...
}

如您所知,我已经使用 ajax.data 属性 来控制 table 来自 API 的请求。这很棒。奇迹般有效。当响应returns时,它看起来像这样

{
    "count": 85,
    "next": "http://myurl.com/?page=2",
    "previous": null,
    "results": [
        ...  // The actual data
    ]
}

从我的配置中,您可以看出我使用 ajax.dataSrc 让 table 获取 results 属性,但我找不到任何文档关于如何从我的回复中获取分页信息。我尝试将我的配置修改为

{
    ...
    "ajax": {
      "url": "/api/customers/",
      "dataSrc": function(data) {
          return {
              recordsTotal: data.count,
              recordsFiltered: ...,
              data: data.results,
              ...
          }
      },
      ...
    },
    ...
}

但这只是引发了一个错误。好像不行。。。那怎么办呢?

您是对的 - 使用 ajax.dataSrc 选项是不可能的。它告诉 DataTables 从哪里获取行数据(在您的示例中为 data.results),但是无法使用 ajax.dataSrc 告诉它从哪里获取 recordsTotal

为此,您需要将 ajax 选项用作函数 - 使您的 Ajax 调用和 return 成为一个对象。基本上与您已经在做的类似,但您也调用 $.ajax