如何判断ajax的datatable,关于javascript:如何在ajax上重新加载dataTable并触发新的分页...

首先,我在这里使用了javascript示例,我掌握了基本知识并自行修改了它。

https://datatables.net/examples/data_sources/server_side

我有几个问题要处理,那些是:

一旦页面加载数据表加载,它就会成功检索默认数据但是它不会应用正确的分页和长度视图。假设我有100个默认数据,它全部显示,而不是将它切成10,这是dataTable的默认长度。同样在分页中,它会生成1~10个分页按钮但由于所有100条记录都已在第1页中显示,因此无效。

使用搜索后,它成功检索到正确的数据,但dataTable不会向其呈现新的数据集,这与上面的示例相矛盾。

这是我的dataTable脚本:

$('#invoice-history').DataTable({

processing: true,

serverSide: true,

searchDelay: 1000,

ajax: {

url: '/stock-sales/search',

type: 'POST',

headers: {

'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')

}

},

columns: [

{ data: 'ss_id' },

{

render: function ( data, type, row, meta ) {

return  row.patient_last_name + ', ' + row.patient_first_name;

}

},

{ data: 'grandtotal_current' },

{ data: 'created_at' },

{

render: function ( data, type, row, meta ) {

return  ' Print';

}

},

{

render: function ( data, type, row, meta ) {

return  ' Return';

}

}

],

columnDefs: [ {

targets: [ 4, 5 ],

orderable: false

} ],

language: {

emptyTable: '

NO INVOICE RECORDS FOUND
',

zeroRecords: '

NO MATCHING RECORDS FOUND
'

},

order: [[ 3, 'desc' ]]

});

在服务器端,我使用Laravel框架:

public function search(Request $request)

{

$transactions = StockSales::getAllByDepartment(Auth::user()->employee->department->id, $request->search['value']);

return array(

"draw" => 1,

"recordsTotal" => count($transactions),

"recordsFiltered" => count($transactions),

"data" => $transactions

);

}

我不希望在过滤之前得到原始记录总数,所以我将其设置为相同,我不认为它与结果数据的分页有关,因为我还试图硬编码更高的recordsTotal值。

编辑:

实际上通过从ajax返回绘制整数来重新搜索数据表

public function search(Request $request)

{

$transactions = StockSales::getAllByDepartment(Auth::user()->employee->department->id, $request->search['value']);

return array(

"draw" => $request->draw, //from fixed 1

"recordsTotal" => count($transactions),

"recordsFiltered" => count($transactions),

"data" => $transactions

);

}

在数据表初始化中尝试"pageLength"属性以指定每页的行数。

"pageLength": 10,

服务器端:

您需要使用ajax请求传递的'length'和'start'参数进行服务器端分页。 查看服务器端处理中数据表使用的所有参数。

$limit = $request->length;

$start = $request->start;

因此,您可以将控制器方法微调为:

$transactions = StockSales::getAllByDepartment(Auth::user()->employee->department->id,

$request->search['value'])

->offset($start)

->limit($limit);

return array(

"draw" => $request->draw, //from fixed 1

"recordsTotal" => count($transactions),

"recordsFiltered" => count($transactions),

"data" => $transactions

);

这里的问题是你误解了服务器端处理serverSide: true由于https://datatables.net/examples/data_sources/server_side

With server-side processing enabled, all paging, searching, ordering actions that DataTables performs are handed off to a server where an SQL engine (or similar) can perform these actions on the large data set (after all, that's what the database engine is designed for!). As such, each draw of the table will result in a new Ajax request being made to get the required data.

在您的情况下,您将返回所调用的ajax上的所有数据,并认为数据表将处理分页,为您排序。 这是错误的,你必须自己在ajax上调用它

但是,100条记录并不大,您可以解决问题

serverSide: false

像这样改变,datatable将从ajax源加载所有数据并为您处理

我实际上有一百万条记录,我只默认100条,让数据搜索检索其他数据

$request->search['value']从数据表过滤器获得的这个值? 如果不只是改变serverSide: false,它可以按你的意愿工作

我设法通过实际返回由ajax发送给我的绘制值来进行搜索工作,现在问题是它仍然在第1页中呈现所有结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值