我正在使用数据表通过Laravel和Yajra的插件显示一个大约15〜20 k行的表。显示信息不是问题。当我尝试使用按钮导出数据(即导出到Excel电子表格)时出现问题:如果我尝试导出到PDF或XLSX且具有足够行的查询,浏览器将冻结(当它很小时,没有问题)。
后来我意识到,即使我使用ajax从一开始就提取数据,但它并不是在使用服务器端处理,而是一次获取所有内容。因此,我尝试添加“ serverSide:true”,当我这样做时,仅加载了10个条目。没有其他东西被加载。
控制器代码:
public function getDatatable()
{
return Datatables::of(Dev_BCH::query())->make(true);
}
JavaScript代码:
var table = $('#BCHtable').DataTable( {
orderCellsTop: true,
fixedHeader: false,
responsive: true,
oSearch: {"bSmart": false},
ajax: "{{ route('datatableInvBCH') }}",
dom: 'Bfrtip',
buttons: {
buttons: [
{ extend: 'pdfHtml5', className: 'pdfButton', orientation: 'landscape' },
$.extend( true, {}, buttonCommon, {
extend: 'excelHtml5', className: 'excelButton',
text: 'Excel filtrado'
} ),
{
text: 'Excel completo',
action: function ( e, dt, node, config ) {
$('#loader').show();
$('#holder').show();
getExcel("{{route('exportBCH')}}");
}
}
]
},
language:
{"url": "{{asset('assets/dt/Spanish.lang')}}"}
,
columns: [
{data: 'id', name: 'id', visible: false},
{data: 'alias', name: 'alias'},
{ data: 'rotulo', name: 'rotulo'},
{ data: 'serie', name: 'serie'},
{ data: 'tipo', name: 'tipo'},
{ data: 'marca', name: 'marca'},
{ data: 'modelo', name: 'modelo'},
{ data: 'nombre', name: 'nombre'},
{ data: 'rut', name: 'rut'},
{ data: 'region', name: 'region'},
{ data: 'site', name: 'site', width: "100px"},
{ data: 'fecha_reporte', name: 'fecha_reporte', visible:false},
{ data: 'ultima_conexion', name: 'ultima_conexion', visible:false}
],
...
});
有什么我可以尝试至少能够下载过滤的数据在服务器端的,也许是我自己做的。