在我的Laravel应用程序中,我有多个页面都有DataTables,它们都有"class = mydttable"的类。我使用Ajax将数据加载到DataTables中。
在每个表的每一行中,我都有一个带有删除按钮的列。每当我按下它时,我会对相应的行执行删除操作,
当然,上面的HTML只是第一个DataTable(“users”)的HTML代码,其他表格也有HTML代码,但我不会在这里粘贴它,以避免让这个问题过长。此外,在任何给定时间,视图(html)中只显示一个dataTable。
所以,当我点击具有ssDelete ID的任何按钮时,我会删除当前显示的dataTable的当前记录,并且我想要刷新包含删除按钮的dataTable。由于我没有为每个表单独立编写删除函数,因此我也希望能够更简洁地完成ajax重新加载等操作。
因此,我的目标是能够在单击“#ssDelete”按钮时重新加载文档中加载的任何DataTable,而无需进行额外的分配和条件语句...但我的尝试并没有起作用:
我该怎样做呢? 编辑 人们似乎没有读完我的问题,所以我在这里重复一下关键点: 我需要能够仅有一个函数来删除多个数据表中的记录。为了达到这个目的(删除部分已经完成且正常工作),我需要刷新/重新加载可见数据表的内容。而且我需要这样做而不必测试哪个表是可见的。 基于所有我的数据表都共享同一个类的事实,我应该能够调用一个通用的数据表,并对其应用ajax.reload()函数。但这并不起作用。我需要一种访问当前视图中任何数据表的通用方法...类似于:
然后我想重新加载数据到datatable中
。我可以通过if语句来判断哪个表格上有按钮,然后执行这个重载操作,但是我想知道是否有更简单的方法来实现这个重载操作。
更具体地说...
在我的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",
...
});
现在,处理删除按钮的点击事件,在执行删除操作后需要进行重新加载
$( 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代码,但我不会在这里粘贴它,以避免让这个问题过长。此外,在任何给定时间,视图(html)中只显示一个dataTable。
所以,当我点击具有ssDelete ID的任何按钮时,我会删除当前显示的dataTable的当前记录,并且我想要刷新包含删除按钮的dataTable。由于我没有为每个表单独立编写删除函数,因此我也希望能够更简洁地完成ajax重新加载等操作。
因此,我的目标是能够在单击“#ssDelete”按钮时重新加载文档中加载的任何DataTable,而无需进行额外的分配和条件语句...但我的尝试并没有起作用:
success:function(data) {
$(".mydttable").ajax.reload(); // NOT WORKING
...
我该怎样做呢? 编辑 人们似乎没有读完我的问题,所以我在这里重复一下关键点: 我需要能够仅有一个函数来删除多个数据表中的记录。为了达到这个目的(删除部分已经完成且正常工作),我需要刷新/重新加载可见数据表的内容。而且我需要这样做而不必测试哪个表是可见的。 基于所有我的数据表都共享同一个类的事实,我应该能够调用一个通用的数据表,并对其应用ajax.reload()函数。但这并不起作用。我需要一种访问当前视图中任何数据表的通用方法...类似于:
$(".mydttable").ajax.reload();
或者
$('.mydttable').dataTable().fnReloadAjax();
或者
$('.mydttable').DataTable().ajax.reload();
显然,如果我这样做,jQuery会尝试在普通的Table元素上执行一个函数,而不是在Table的dataTable转换上执行。如果我像上面那样尝试将DataTable()应用于元素,则会出现:
未捕获的TypeError:无法读取未定义的“重新加载”属性
以下是我的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变量),重载不会发生。
我的代码有什么问题?我该怎么解决?
$(this)
元素并遍历查找所需的函数。 - Roger