【问题标题】:datatables dataSrc function not called on successful ajax response成功的ajax响应未调用datatables dataSrc函数
【发布时间】:2017-01-21 13:38:51
【问题描述】:

我正在使用Datatables 插件使用 ajax 属性从服务器获取表数据,并使用 dataSrc 属性对其进行转换。我的数据表定义:

var my_table = $('#my_table').dataTable({
    "processing": true,
    "serverSide": true,
    "ajax": {
        "url": "/my/url",
        "type": "POST",
        "dataSrc": function(json) {
            console.log('json', json);
            return format_my_table_data(json.data);
        }
    },
    "deferLoading": found_rows,
    "data": initial_my_table_data,
    "ordering": true,
    "order": [[1, "desc"]],
    "lengthMenu": [
        [25, 50, 100],
        [25, 50, 100]
    ],
    "columns": my_table_columns
});

初始加载工作正常,排序列和搜索工作有时但大多数情况下我看到 ajax 调用成功返回并使用有效的 json(我使用 jsonlint.com 验证)并且表格卡在“处理中...”有时或表格根本没有改变。

来自服务器的 JSON: {"recordsTotal":379,"recordsFiltered":378,"draw":25,"data":[{...}]}

在控制台中检查网络时,我可以看到正在发送的 ajax 请求和每次都相似的响应(总时间在 600 毫秒到 1600 毫秒之间,具体取决于返回的行数),但我的 console.log 在未调用 dataSrc 函数,并且控制台中没有 javascript 错误。什么给了?

【问题讨论】:

  • 您返回的 draw 参数是否与服务器请求中收到的相同?如果请求和响应中的draw 值不匹配,插件可能会丢弃响应。
  • @Gyrocode.com 返回结果的数量小于draw值的情况,如果draw值是3,你只能找到3行?或者我可能误解了“画”是什么。

标签: jquery datatables datatables-1.10


【解决方案1】:

您的脚本应返回与请求中的draw 参数值相同的draw 参数。我相信它从1 开始,然后随着每个请求而递增。

来自manual

draw

此对象响应的绘制计数器 - 来自作为数据请求的一部分发送的 draw 参数。请注意,出于安全原因强烈建议将此参数转换为整数,而不是简单地将其在 draw 参数中发送的内容回显给客户端,以防止跨站点脚本(XSS) 攻击。

【讨论】:

  • 谢谢,我把draw属性误读为返回的行数而不是表格绘制的次数。我将返回的绘图值更改为传入的任何值,现在它可以工作了。
猜你喜欢
  • 2021-01-11
  • 2015-11-12
  • 2015-05-07
  • 2013-08-04
  • 2023-03-08
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多