【问题标题】:Showing 0 to 0 of 0 entries (filtered from NaN total entries)显示 0 到 0 个条目,共 0 个(从 NaN 总条目中过滤)
【发布时间】:2023-03-30 16:25:01
【问题描述】:

我正在使用 jQuery DataTables 版本 1.10.12。下面是我的相关代码

// initialize datatable
jQuery('#taskTable').DataTable( {
    "bProcessing": true,
    "bServerSide": true,
    "bInfo": true,
    "bPaginate": true,
    "bLengthChange":false,
    "pageLength": 10,
    "sAjaxDataProp":"serverPageDataModelBean.data" 
});

正在显示数据并且分页正在工作。但是,当我设置 "bInfo": true 时,我收到以下消息:

显示 0 到 0 个条目,共 0 个条目(从 NaN 总条目中过滤)

我的下一步按钮不起作用。在 serverPageDataModelBean 中,我发送{"recordsTotal":12,"recordsFiltered":12,"data":[]},其中数据不为空。

谁能告诉我怎么了?

【问题讨论】:

    标签: javascript datatables


    【解决方案1】:

    我知道这为时已晚,但我发布此内容以防有人偶然发现此内容。 答案是您需要将 serverside 设置为 false,例如 "serverSide": false。

    【讨论】:

    • 谢谢!!真的很感激。
    • @Mamadou Barry 如果我从后端的 ajax 调用中获取数据,如果我将服务器端设为 false 或删除,那么没有数据显示
    【解决方案2】:

    原因

    您的服务器端响应缺少 draw 参数,该参数应与请求中的 draw 参数具有相同的值。发生这种情况时,jQuery DataTables 会丢弃数据。

    draw

    此对象响应的绘制计数器 - 来自作为数据请求的一部分发送的 draw 参数。

    解决方案

    从请求中返回与draw 参数值相同的draw 参数。

    链接

    更多信息请参见Server-side processing - Returned data

    【讨论】:

    • 我知道为时已晚。但是我们该怎么做呢?
    【解决方案3】:

    如果您使用serverside: true 选项,则删除此选项或写serverside: false

    例如:

    $(document).ready(function() {
        $('#example1').dataTable( {
            "ajax": {
                "url": "view_results",
                "type": "POST"
            },
            'order':[]
        } );
    });
    

    【讨论】:

      【解决方案4】:

      在服务器端处理例如 php 时对空数据的响应将是 ...

      echo json_encode(
              array(
              'draw' => $_POST['draw'],
              'data' => [],
              'recordsFiltered' =>  0,
              'recordsTotal' => 0
              )
           );
      

      在纯 json 中

      {"draw":1,"data":[],"recordsFiltered":0,"recordsTotal":0}
      

      简而言之,无论 2020 年的 Datatable 需要在服务器端处理此参数。

      【讨论】:

        【解决方案5】:

        删除 serverSide 属性(或使其为 false)不是正确的解决方案。如果您将分页设置为 true 并且站点范围的分页控制正在显示的数据,这将中断。如果您没有任何此类自定义,那么现成的 jQuery 分页将完成这项工作。

        始终有效的解决方案是在服务器调用返回的 json 中设置“draw”属性。

        我可以从 Coldfusion 的角度提供一个示例。这个想法是一样的。确保您返回到服务器的 json 添加了“draw”参数。

          <cfquery name="qryItemList" datasource="#session.dbsource#">
            SELECT  item 1,
                    item 2,
                    COUNT(*) OVER () as TotalCount
            FROM  Items 
          </cfquery>
          <cfif len(qryItemList.TotalCount) NEQ 0>
            <cfset Total= qryItemList.TotalCount>
          <cfelse>
            <cfset Total= 0>
          </cfif>
          <cfset dataset = queryToStruct(qryItemList)> //queryToStruct is a UDF to convert an entire query to a struct
          <cfset dataset = serializejson(dataset)>
        
          <cfset dataset = ReplaceNoCase(dataset,'"recordcount":#qryItemList.recordcount#','"recordsTotal":#Total#,"recordsFiltered":#Total#, "draw":"0"')>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-28
          • 2015-04-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-12
          相关资源
          最近更新 更多