我有一个大约30000行的mysql表。我必须将所有行放在DataTable中,并在每次加载表页时加载每个段(当您单击分页时)。我看到我可以在我的JS中使用deferLoading参数,但是当我使用它时,我的页面没有加载。正如你所看到的,我必须加载图像,所以我必须轻松加载内容...
这是我的HTML:
<table class="table table-striped table-bordered table-hover datatable products-datatable">
<thead>
<tr>
<th></th>
<th><?=_("Product")?></th>
<th></th>
</tr>
</thead>
<tfoot>
<tr>
<th></th>
<th><?=_("Product")?></th>
<th></th>
</tr>
</tfoot>
</table>
这是我的JS:
var table = $('.products-datatable').dataTable( {
"order": [[ 1, "asc" ]],
"processing": true,
"serverSide": true,
"deferLoading": 30000,
"ajax": {
url: location.protocol + '//' + location.hostname + '/ajax/products.php?action=list',
type: "POST"
},
"columns": [
{ "data": "image",
"orderable": false,
"width": "80px" },
{ "data": "product" },
{ "data": "action",
"orderable": false,
"width": "20px",
"sClass": "class",
}
]
});
这是我的AJAX:
$req = $pdo->prepare('SELECT product_id, name FROM products');
if ( $req->execute() ) {
if ($req->rowCount()) {
$result['draw'] = 1;
$result['recordsTotal'] = $req->rowCount();
$result['recordsFiltered'] = 10;
$result['data'] = array();
$result['DT_RowId'][] = array();
while( $row = $req->fetch() ) {
if ($row['name']) { $name = $row['name']; } else { $name = "N/A"; }
$result['data'][] = array( "DT_RowId" => $row['product_id'],
"DT_RowClass" => 'myclass',
"image" => '<a href="' . HOSTNAME._("product").'/'.$row['product_id'] . '"><img src="' . HOSTNAME.'assets/img/products/' . $row['product_id'] . '.jpg" class="product_thumb"></a>',
"product" => '<a href="' . HOSTNAME._("product").'/'.$row['product_id'] . '">' . $name . '</a>',
"action" => "<a href=\"#\" class=\"button-delete\" id=\"" . $row['product_id'] . "\"><i class=\"fa fa-close fa-2x text-danger\"></i></a>"
);
}
}
}
$req->closeCursor();
我确定我错过了一些东西......: - (
答案 0 :(得分:0)
我相信您不需要使用deferLoading
从服务器端处理中受益。
您当前的脚本只返回所有记录,并且不进行排序或过滤。您需要使用ssp.class.php
(在DataTables分发包中提供)或emran/ssp类来正确处理服务器上的AJAX请求。
DataTables库将在AJAX请求中发送start
和length
参数,指示需要哪部分数据,服务器端处理类将为您正确处理它。
请参阅server-side processing的示例以获取更多信息。