jquery Datatables - 如何实现服务器端提取和客户端排序

ksh*_*ghl 10 sorting jquery jquery-plugins datatables

我正在使用datatables插件来处理我们的表.我们有这个用例,我们需要使用bServerSide和sAjaxSource通过ajax调用来获取数据(分页),但是我们只想对该页面上的数据进行排序,而不是从服务器中获取已排序的数据,就像在我们的例子中这样读取会很贵.

有可能吗?如果是,请建议如何继续.提前致谢!!

Nic*_*tti 5

我读过这个讨论可能会对您有所帮助:基本上您必须使用这些选项初始化表;

"bServerSide" : false,
"sAjaxSource" : "path to your ajax source"
Run Code Online (Sandbox Code Playgroud)

这样,数据仅加载一次,所有过滤都由客户端完成。

如果您想加载更多数据,可以使用fnReloadAjax。您可以阅读有关主题的讨论,我认为它有您需要的所有答案。

编辑 - 使用管道,您可以避免仅为了分页而频繁调用服务器(如果您过滤数据,则会调用服务器)。如果您只想将数据发送到服务器一次,然后在客户端过滤数据,则必须禁用服务器端处理(将上面的选项设置为白色)。如果禁用服务器端处理,您可以为用户提供一种通过“fnReloadAjax”(例如按钮)从服务器获取附加数据的方法。

我仍然不明白的是,您是否需要从服务器获取一些其他数据,或者用户首先获取的数据可以吗?

编辑2 - 如果您不想调用服务器,您可以通过增强现有表来完全避免使用AJAX。只需像这样创建 html 服务器端:

 <table width="770" border="0" id='rdr_home' class='tablesorter'>
        <thead>  
          <tr>
            <th>col1</th>
            <th>col2</th>
            <th>col3</th>
          </tr>
        </thead>
        <tbody>
    <?php 
    foreach ($rows as $row){
    //echo all rows here (be careful as for each row you must 
    //have as many <td> as the column: no colspan!
    }
    ?>
        </tbody>
    </table>
Run Code Online (Sandbox Code Playgroud)

然后创建你的数据表,例如这样

oTable = $('.tablesorter').dataTable({
        "aaSorting": [[2, "asc"]],
        "bAutoWidth": false,
        "bFilter": false,
        "sDom": 'T<"clear">lfrtip',
        "aoColumns": [
                    { "sType": "html" },
                    { "sType": "html" },
                    null
                ],
        "oLanguage": {
            "sUrl": "templates/rhuk_milkyway/dataTables/media/language/it_IT.txt"
        }
    });
Run Code Online (Sandbox Code Playgroud)

这样你就可以在服务器端进行分页和过滤

编辑3 - 在您提到的情况下(数据表负责分页,但不要求过滤),我认为您必须添加一些额外的插件。您必须在初始化过程中禁用数据表的过滤器和排序器,如下所示;

    "bFilter": false,
    "bSort": false,
Run Code Online (Sandbox Code Playgroud)

然后使用另一个组件对屏幕上的内容进行排序和过滤。您可以在此处查看具有排序和过滤功能的解决方案:http://silverwareconsulting.com/index.cfm/2008/10/2/jquery-autofiltering-table

(我个人不喜欢通过点击进行过滤的想法,但是如果您想使用更符合您口味的东西,您可以在此基础上进行构建),无论如何,如果您允许服务器端,则不能使用数据表内置过滤器分页