渲染服务器端后,数据表搜索和分页无法正常工作

时间:2017-11-06 13:40:23

标签: php ajax search pagination datatables

我目前正在使用以下代码渲染表格(这使得表格和信息很好,但分页或搜索功能不起作用)

        $('#example').DataTable({

        "bDestroy":true,
        "iDisplayLength":5,
        "lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]],
        "bServerSide" : true,
        "sPaginationType": "full_numbers",
        "iDisplayStart ":5,
        "sAjaxSource": '/path/to/controller/method',
        "fnServerData" : function(sSource, aoData, fnCallback) {

             $.ajax({
                "dataType" : 'json',
                "type" : "POST",
                "url" : sSource,
                "data": {requested_date: today}, // today is variable I obtain elsewhere
                "success" : function(data){
                    str = JSON.stringify(data);
                    str = JSON.stringify(data, null, 4);
                    $('tbody').empty();
                    $.each(JSON.parse(str), function (i, result) {
                        $('tbody').append(
                            '<tr>' +
                            '<td>' + result.id + '</td>' +
                            '<td>' + result.name + '</td>' +
                            '<td>' + result.age + '</td>' +
                            '<td>' + result.created_at + '</td>' +
                            '<td>' + result.other_info + '</td>' +

                            '<td>' + result.message + '</td>' +

                            '</tr>'
                        )
                    });

                }
            });
         }
    });

我需要将今天的日期传递给我的控制器方法以获取所需的信息,然后我需要附加表格的主体以显示此信息。我究竟做错了什么?该表完美呈现,但是当我这样做时,数据表功能的使用已经消失。我知道aoData与分页和搜索工作相关,但我是如何将其用于我的代码呢?

非常感谢!

2 个答案:

答案 0 :(得分:0)

我实际上有一个非常相似的问题。但我认为第一个问题是你将遗留的dataTable与1.10+混合在一起。

在您的声明中:$(&#39;#example&#39;)。DataTable({

如果您使用Capital D声明数据表,则需要以更新的格式传递选项,例如&#34; serverSide&#34;而不是&#34; bServerSide&#34;。请参阅https://datatables.net/examples/server_side/simple.html

上的示例

我仍然遇到类似的问题,我的分页没有显示(说有100条记录,10条记录已过滤,10条数据的数组)但它没有给我正确的分页数和&#34;下一页&#34 ;按钮被禁用。

对于您的情况,选择使用旧数据表或1.10+版本使用&#34; DataTable&#34;喜欢你做的。

我希望它有点帮助!

答案 1 :(得分:0)

  

错误消息http://datatables.net/tn/3准确地说明了问题。

     

您需要先破坏表格,请参阅http://datatables.net/manual/tech-notes/3#destroy。您可以使用$(&#34; #example&#34;)。dataTable()。fnDestroy()(DataTables 1.9.x)或$(&#34; #example&#34;)。DataTable()。destroy ()(DataTables 1.10.x)。

function myfunction()
{

        // Destroy the table
        // Use $("#example").DataTable().destroy() for DataTables 1.10.x
        $("#example").dataTable().fnDestroy()

        $("#example").dataTable({
           // ... skipped ...
        });

}
  

或者,如果你正在使用DataTables 1.10.x,你可以使用附加选项&#34; destroy&#34;:true初始化新表,见下文。

function myfunction()
{

        $("#example").dataTable({
            "destroy": true,
            // ... skipped ...
        });

}