首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Datatables的自然排序插件可以在服务器端处理数据的地方工作吗?

Datatables的自然排序插件可以在服务器端处理数据的地方工作吗?
EN

Stack Overflow用户
提问于 2014-03-04 04:03:23
回答 2查看 1.4K关注 0票数 0

我让它可以处理静态html数据,如jsfiddle所示:

http://jsfiddle.net/L7PNV/

通过指定

代码语言:javascript
复制
aoColumns: {"sType": "natural"}

其中,当我对第一列进行排序时,它以正确(自然排序)的顺序显示行:

代码语言:javascript
复制
SIR_1_SIL_CGG_2011_224_SILAC1b_IMAC_Fr1    
SIR_2_SIL_CGG_2011_224_SILAC1b_IMAC_Fr1    
SIR_3_SIL_CGG_2011_224_SILAC1b_IMAC_Fr1    
SIR_10_SIL_CGG_2011_224_SILAC1b_IMAC_Fr1
...

但是,我想将自然排序应用于这个相同的数据表,其中数据是在服务器端获取的,我调用数据表的代码与jsfiddle中添加服务器端相关内容的代码相同:

代码语言:javascript
复制
$ -> 
  $("#sir_table").dataTable
    sPaginationType: "full_numbers"
    bProcessing: true
    bServerSide: true
    aoColumns: [{"sType": "natural"}, {"sType": "natural"}, {"sType": "natural"} ]
    aaSorting: [[ 1, "asc" ]]
    sAjaxSource: $('#sir_table').data('source')

DataTable显示得不错,但是natural-sort不能正常工作(就像上面的jsfiddle一样)。而是显示行:

代码语言:javascript
复制
SIR_1_SIL_CGG_2011_224_SILAC1b_IMAC_Fr1    
SIR_10_SIL_CGG_2011_224_SILAC1b_IMAC_Fr1
... 
SIR_19_SIL_CGG_2011_224_SILAC1b_IMAC_Fr1
SIR_2_SIL_CGG_2011_224_SILAC1b_IMAC_Fr1
SIR_20_SIL_CGG_2011_224_SILAC1b_IMAC_Fr1

为什么会发生这种情况?自然排序插件是否与服务器端处理兼容?我应该如何实现它?

EN

回答 2

Stack Overflow用户

发布于 2014-03-04 22:20:50

不,我要说的是,在进行服务器端处理时,你不能使用这个插件。

一旦您从外部源检索数据,dataTables将只显示服务器上的数据窗口。这可以是数千行,这就是serversided处理背后的全部思想。dataTables只会向服务器发送一个带有一些信息的POSTGET请求,并且只返回适合当前视图的那部分数据。通过页码和items_per_page进行钳制。

排序和过滤也是在服务器端完成的。因此,每当您对列进行排序、单击分页或应用过滤器时,dataTables都会向服务器发送一个请求。您可以(例如使用firebugs控制台查看此请求。您将以ASC或DESC的形式找到每行的实际页码、每页的行数和排序信息。

假设您的服务器使用PHP和MYSQL,那么php将获取此数据,并使用LIMIT pagenumber*acutal_page, rows_per_pageORDER BY field, ASC/DESC从数据库中获取其字段。

因此,在这种情况下,排序将由MySQL完成(这对于自然排序来说并不是很好,尽管它是可能的)。

如果你使用mongoDB和/或node.js作为底层数据源,在dataTables中实现排序算法(非常先进和令人敬畏)应该是相当容易的,因为这是一个普通的javascript,两者都可以处理。

但这必须发生在服务器端,在客户端,dataTables只能看到服务器上海量数据的一小部分。

希望这能对你有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2014-08-09 13:37:16

只需在'ssp.class.php':中修改‘静态函数顺序( $request,$columns )’函数即可

代码语言:javascript
复制
if ( $column['db'] == 'Nr' ) {
    // Natural Sort
    $orderBy[] = 'LENGTH(`' . $column['db'] . '`) ' . $dir . ', ' . '`' . $column['db'] . '` ' . $dir;
} else {
    $orderBy[] = '`' . $column['db'] . '` ' . $dir;
}

从现在开始,名为'Nr‘的列将具有自然排序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22156229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档