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

时间:2015-09-24 12:18:18

标签: jquery ajax datatable pagination

我正在努力使数据表与我的其他API一起运行良好。让我说明蝙蝠的权利:“REST api不会改变!

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

我已经像这样设置了我的桌子:

{
    "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属性来管理来自API的表请求。这很棒。奇迹般有效。当响应返回时,它看起来像这样

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

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

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

但那只是犯了一个错误。似乎不可能......那么,我该怎么办?

1 个答案:

答案 0 :(得分:1)

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

为此你需要使用ajax选项作为函数 - 进行Ajax调用并返回一个对象。基本上与您已经在做的相似,但您也可以调用$.ajax