【问题标题】:JQuery DataTables Server-Side Processing Not RenderingJQuery DataTables服务器端处理不呈现
【发布时间】:2017-01-24 14:45:13
【问题描述】:

我正在尝试使用服务器端处理来实现 DataTables。

据我所知,我所拥有的是正确的。但是当我加载页面时,我看到的只是"No matching records found"

我正在使用 DataTables 1.10.9。

我的桌子是这样设置的:

<table id="resellerListTable" class="table table-hover table-condensed display dataTable no-footer" role="grid">
    <thead>
    <tr role="row">
        <th class="sorting_disabled" name="asd"></th>
        <th class="sorting_disabled">Name</th>
        <th class="sorting_disabled">Active</th>
        <th class="sorting_disabled no-sort"></th>
    </tr>
    </thead>
    <tfoot>
    <tr role="row">
        <th class="sorting_disabled" name="asd"></th>
        <th class="sorting_disabled">Name</th>
        <th class="sorting_disabled">Active</th>
        <th class="sorting_disabled no-sort"></th>
    </tr>
    </tfoot>
</table>

这是初始化 DataTable 的 Javascript。

$('#resellerListTable').DataTable({
    processing: true,
    serverSide: true,
    ajax: {
        type: 'POST',
        url: self.ajaxRoute,
        data: function (d) {
            // Format DataTables data for the API, and include some required data.
            var returnData = {
                controller: controller,
                method: method,
                data: d,
            };
            window.$.extend(returnData.data, data);
            return JSON.stringify(returnData);
        },
        dataSrc: function (d) {
            // Format API response for DataTables
            var response = d;
            if (typeof d.response != 'undefined') {
                response = d.response;
            }
            console.log(JSON.stringify(response)); // Output from this is below...
            return response;
        },
        async: true,
        error: function (e) {
            console.log(e);
        },
        drawCallback: function() {
            console.log('table drawn');
        }
    }
});

这是上面console.log()记录的输出

{
    "data": [
        [
            "<img src='' />",
            "Something 1",
            "not active",
            "<a href='/retailer/edit/1'>Edit</a><a href='/retailer/delete/1'>Delete</a>"
        ],
        [
            "<img src='' />",
            "Something 2",
            "not active",
            "<a href='/retailer/edit/2'>Edit</a><a href='/retailer/delete/2'>Delete</a>"
        ],
        [
            "<img src='' />",
            "Something 3",
            "not active",
            "<a href='/retailer/edit/3'>Edit</a><a href='/retailer/delete/3'>Delete</a>"
        ],
        [
            "<img src='' />",
            "Something 4",
            "not active",
            "<a href='/retailer/edit/4'>Edit</a><a href='/retailer/delete/4'>Delete</a>"
        ],
        [
            "<img src='' />",
            "Something 5",
            "not active",
            "<a href='/retailer/edit/5'>Edit</a><a href='/retailer/delete/5'>Delete</a>"
        ],
        [
            "<img src='' />",
            "Something 6",
            "not active",
            "<a href='/retailer/edit/6'>Edit</a><a href='/retailer/delete/6'>Delete</a>"
        ],
        [
            "<img src='' />",
            "Something 7",
            "not active",
            "<a href='/retailer/edit/7'>Edit</a><a href='/retailer/delete/7'>Delete</a>"
        ],
        [
            "<img src='' />",
            "Something 8",
            "not active",
            "<a href='/retailer/edit/8'>Edit</a><a href='/retailer/delete/8'>Delete</a>"
        ],
        [
            "<img src='' />",
            "Something 9",
            "not active",
            "<a href='/retailer/edit/9'>Edit</a><a href='/retailer/delete/9'>Delete</a>"
        ],
        [
            "<img src='' />",
            "Something 10",
            "not active",
            "<a href='/retailer/edit/10'>Edit</a><a href='/retailer/delete/10'>Delete</a>"
        ]
    ],
    "recordsTotal": "23",
    "recordsFiltered": "23",
    "draw": 1
}

我还可以看出,DataTables 正在尝试绘制结果,因为每次刷新后都会在控制台中输出 table drawn

谁能指出我正确的方向?

【问题讨论】:

  • 在datasrc回调中尝试return response.data;而不是return response;,按照此处的示例datatables.net/reference/option/ajax.dataSrc
  • 我也认为 JSON 中“数据”中的项目应该是对象,而不是数组。即"data": [ { "&lt;img src='' /&gt;", "Something 1", "not active", "&lt;a href='/retailer/edit/1'&gt;Edit&lt;/a&gt;&lt;a href='/retailer/delete/1'&gt;Delete&lt;/a&gt;" } 注意 {...} 表示一个对象,而不是 [...] 表示一个数组。并且对象中的每个项目都应该有一个属性名称,表示它所属的列,例如。 "column1": "&lt;img src='' /&gt;"。见datatables.net/release-datatables/examples/ajax/objects.html
  • 感谢您的 cmets!这两项更改似乎都解决了我查看表中行的问题。但是,结果计数已关闭。我看到“显示 0 个条目中的 0 到 0 个(从 NaN 总条目中过滤)”,而不是预期的“显示 23 个条目中的 1 到 10 个(从 NaN 总条目中过滤)”。当 DataTables 正在查找该数据时,我应该添加另一个函数来格式化响应吗?
  • 由于您设置了“服务器端”选项,因此您的响应需要返回此处链接中显示的参数。 datatables.net/manual/server-side 这是因为您应该处理服务器上的所有分页等逻辑。附言我从来没有使用过 DataTables,我所做的只是阅读手册——也许你需要在继续之前更深入地研究它
  • 我正在从 API 返回这些参数,但所需信息位于返回数据中的 response 属性内。这就是我在上面操作 dataSrc 函数的原因。但是,这似乎纯粹是针对实际数据,而不是附加参数。

标签: javascript jquery datatables datatables-1.10


【解决方案1】:

有几点:

1) 在dataSrc回调中放

return response.data; 

而不是

return response; 

根据https://datatables.net/reference/option/ajax.dataSrc 的示例

2)我认为JSON中“数据”中的项目应该是对象,而不是数组,即

"data": [ { "<img src='' />", "Something 1", "not active", "<a href='/retailer/edit/1'>Edit</a><a href='/retailer/delete/1'>Delete</a>" }... 

注意 {...} 表示一个对象,而不是 [...] 表示一个数组。并且对象中的每个项目都应该有一个属性名称,表示它所属的列,例如。

"column1": "<img src='' />"

https://datatables.net/release-datatables/examples/ajax/objects.html

【讨论】:

  • 我最终做了以下事情,因此响应被引用修改:dataSrc: function (d) { d.draw = d.response.draw; d.recordsTotal = d.response.recordsTotal; d.recordsFiltered = d.response.recordsFiltered; return d.response.data; }
  • 可以的。虽然如果您能够修改服务器的响应,那么从那里以正确的结构返回它们会更有意义,那么您不必在 JS 中修改它。
猜你喜欢
  • 2021-05-21
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 2011-04-01
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多