【问题标题】:passing datatable page number to webservice将数据表页码传递给 Web 服务
【发布时间】:2015-04-01 11:55:04
【问题描述】:

我正在使用数据表和 jQuery。

我正在使用 Web 服务的结果填充我的表。此 Web 服务需要在关联查询中包含 LIMIT 子句,因为结果太多,页面加载时间过长。

所以我的目标是在我的网络服务调用中使用页码:

如果我点击第 2 页,我将发布 20,40 到限制,如果我点击第 3 页,我将发布 30,50。

所以基本上它将是:

page number clicked * 10 对于起始范围和 page number clicked * 10 + 20 为 LIMIT 子句的结束范围。

但是显示的页码是基于结果的数量,如果我以 0,20 的 LIMIT 发布我的网络服务,那么只有 20 个结果,而我表格底部的页码显然不会有 2 ,3,4 等作为选项,因为最初只返回了 20 行。

有没有办法解决这个问题?

有没有更好的方法来实现我想要实现的目标?

一些代码:

$(document).ready(function()
{
   tableAllocation('<?php echo $_SESSION['AuthCode']?>');

   $('#table_id').dataTable( {
    "pageLength" : "20",
    "order": [[ 0, "asc" ],[1, "asc"]]
    });

});

其中表分配是一个调用 web 服务并解析响应以填充我的数据表的 js 函数

【问题讨论】:

  • 您使用什么网络服务?一个PHP脚本?您自己是否有权访问数据库表(如 mysql)?
  • @davidkonrad 一个 php 脚本是的。我确实可以通过我的脚本访问

标签: jquery web-services pagination limit jquery-datatables


【解决方案1】:

有一个现成的解决方案,非常容易实施。它开箱即用地处理诸如LIMIT、排序、分页等琐碎事务。以下是针对mySQL的,long range of databases and architectures也有类似的解决方案。

1) 转到https://legacy.datatables.net/examples/data_sources/server_side.html 并将“服务器端(PHP)代码”复制到一个文件中,您可以调用它datatables.php

2) 编辑datatables.php 凭据:

$gaSql['user']       = "user";  
$gaSql['password']   = "password";  
$gaSql['db']         = "database";  
$gaSql['server']     = "localhost";  

3) 配置datatables.php 表和列设置:

表名

$sTable = "database table";  

显示哪些列

$aColumns = array( 'column1', 'column2' ... );

指定索引列,这很重要

$sIndexColumn = "index column";

索引列不必包含在$aColumns中。

4) 构建标记

<table id="example">
<thead>
    <tr>
        <th>column1</th>
        <th>column2</th>
    </tr>
</thead>
<tbody>
</tbody>
</table>

5) 使用 datatables.php 将数据表创建为服务器端驱动的数据表:

$('#example').dataTable({
    bProcessing: true,
    bServerSide: true,
    sAjaxSource: "datatables.php"
});

上述解决方案适用于 1.9.x 和 1.10.x 数据表版本/分支。

【讨论】:

  • 感谢您的详细回复。将在几个小时内报告并在我开始工作后接受答案!
  • 我从第 3 步开始就很困惑……我的网络服务从哪里进入(填充我的表格)?从我的网络服务收到的 JSON 来自多个数据库表。第 5 步只是我在网页上加载事件时添加到文档中的 js 脚本吗?此外,我正在使用其他数据表工具保存为 pdf、页码等。您建议的设置可以吗?
  • 嘿@user2363025 好的。这更糟糕,因为脚本假定您只针对一个表。要使用多个表,您必须编辑查询构建,即$sQuery = "... 关于第 119 行。如果您提供表名和列名(例如来自您的 Web 服务的原始 SQL),我可能会提出建议)。不要担心 TableTools 或其他插件,它们也可以与这种方法一起使用。是的,第 5 步只是正常的初始化。
  • 我将原始查询粘贴到建议的行。我还需要进行哪些其他更改?当我粘贴自己的查询时,我在网页上收到以下警报:dataTables 警告:表 id=table_id JSON 响应无效。我怀疑这是因为我需要对 datatables.php 文件进行更多更改。因为当调用我的独立 Web 服务时,会返回一个有效的 JSON。感谢指导!
  • 您好,我已经修改了 datatables.php 文件,以便它现在返回正确的 JSON 对象而没有错误。但是在我的网页上,我收到错误“为第 0 行请求未知参数 '0'”。谷歌搜索后,我发现这通常是由于 html 中的列数与 JSON 对象中的元素数不匹配。这不是我的情况,我不确定问题可能是什么。你有这方面的经验吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
相关资源
最近更新 更多