在我的Laravel应用程序中,我有多个页面,我有DataTables . 他们都有"mydttable"类 . 我使用Ajax将数据加载到DataTables中 . 在每个表的每一行,我有一个带删除按钮的列 . 每当我按下时,我在相应的行 then I want to reload the data into the datatable
上执行删除 . 我可以通过使用if语句询问哪个tabel上有按钮来做到这一点,但我想知道是否有更简单的方法来执行此重新加载 . 更确切地说......
是我的custom.js,我像下面这样填充dataTable:
var uzTable = $('#users').DataTable( {
"processing": true,
"serverSide": true,
"sAjaxSource": "sspXController?draw=1",
...
});
var cliTable = $('#clients').DataTable( {
"processing": true,
"serverSide": true,
"sAjaxSource": "sspXController2?draw=1",
...
});
var marTable = $('#market').DataTable( {
"processing": true,
"serverSide": true,
"sAjaxSource": "sspXController3?draw=1",
...
});
现在,在删除点击事件,我在那里删除并想要做 reloading
$( document ).on('click', '.ssDelete', function(e){
e.preventDefault();
$.ajax({
url: someFormAction,
type: 'POST',
dataType: 'html',
success:function(data) {
$(".mydttable").ajax.reload();
}
});
我的HTML是这样的:
<table id="users" class="row-border hover order-column table mydttable dataTable no-footer" cellspacing="0" width="100%">
<thead>
<tr role="row">
<th class="small-sorting" style="width:84px"></th>
<th class="small-sorting" style="width:84px">Operatiuni</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
当然,上面的HTML只是第一个DataTable("users")的HTML,其他表也有HTML代码,但我不会在这里粘贴它以避免使这个问题过长 . 同样在任何给定时间,视图中显示 ONLY ONE dataTable (html)
因此,当我单击带有ssDelete ID的任何按钮时,我会删除当前显示的dataTable的当前记录,并且我想刷新包含删除按钮的dataTable . 由于我没有单独为每个表执行删除功能,我希望能够为ajax重新加载做更短的事情 .
因此,我的目标是能够在单击“#ssDelete”按钮时重新加载文档中加载的任何DataTable,而无需额外的asignments和条件...而且我的尝试不起作用:
success:function(data) {
$(".mydttable").ajax.reload(); // NOT WORKING
...
我怎样才能做到这一点? EDIT 人们似乎没有阅读我的整个问题,所以我将在此重复它的本质:我需要能够只有一个功能来删除多个dataTables的记录 . 为了做到这一点(删除部分已经完成和工作)我需要能够刷新/重新加载VISIBLE dataTable的内容 . 我需要这样做,而不必测试哪些表是可见的 . 基于我的所有dataTable共享同一个类的事实,我应该能够调用一个通用的dataTable并向它应用ajax.reload()函数 . 但它不起作用 . 我需要一种方法来访问当前VIEW中的任何dataTable,使用一些通用的方式...类似于:
$(".mydttable").ajax.reload();
要么
$('.mydttable').dataTable().fnReloadAjax();
要么
$('.mydttable').DataTable().ajax.reload();
显然,如果我这样做,jQuery会尝试在常规Table元素上执行函数,而不是在Table的dataTable转换上执行 . 如果我尝试将DataTable()应用于上面的元素,我会得到:
未捕获的TypeError:无法读取未定义的属性'reload'
这是我到目前为止的ajax调用(也没有工作):
var idtable = $('.mydttable').attr('id');
$.ajax({
url: myFormAction,
type: 'POST',
cache: false,
data : { _token: csrf_token, _method:'DELETE' },
dataType: 'html',
success:function(data) {
$('#DeleteModalDialog').modal('hide');
if(idtable=='users'){
alert('uzerii');
uzTable.ajax.reload();
}else if(idtable=='clients'){
alert('Clients');
cliTable.ajax.reload();
}else if(idtable=='market'){
alert('Market');
marTable.ajax.reload();
}
}
});
因此,即使我获得了警报,也不会发生重新加载,因此它知道可见表的ID是什么 . (如上所示,uzTable,cliTable和marTable是jquery vars)
我的代码出了什么问题......?我怎么解决这个问题?
1 回答
您将需要使用服务器端处理 . 这是我如何做的一个例子 .
除此之外,我建议使用按钮上的click事件来触发删除 .
这个脚本不会帮助你摆脱袖口,但它会指向你正确的方向 .
EDIT
每次执行数据表时,它都会返回数据表句柄 . 您需要使用该句柄才能刷新表 . 我提出了一种方法,一次添加多个表,没有大量的冗余代码 . 只需确保
options.length
和dtable.length
是相同的 . 否则你将通过并索引越界 .