ruby on rails-JQuery DataTable排序与Ajax冲突



所以它来了:我使用dataTable插件来显示我的html表。当我点击一列的标题时,该列就被排序了。它运行良好。但是,当我尝试实现Ajax时,它的行为开始变得古怪起来。我可以通过Ajax删除DOM文档,并且该行从表中消失。但在那之后,如果我点击了表的标题,突然间,这一行又回来了,并被显示了出来,即使它已经在数据库中被删除了!dataTable怎么了?我怀疑jQueryremove()并没有从页面的DOM中删除实际元素,不知何故,它仍然存在,但没有显示出来。因此,当我点击标题时,数据表认为行仍然存在。我被卡住了。有人能帮我吗?非常感谢你的帮助。感谢

这里可能发生了许多事情中的一件。

  • 您是否使用带有"fnServerData"的缓存管道?

  • 我猜,当您从数据表中删除行时,您也在进行ajax调用以将其从数据库中删除。在再次尝试排序之前,是否确保操作已完成?

  • 您可以在删除回调的成功回调上执行$("#tableID").fnDraw(),而不是执行.remove()。这将导致数据表从数据库中获取新数据并为您呈现该表。

当您使用"bServerSide":true作为数据表的选项时,最好的做法可能不是通过jquery.remove()或其他dom操作方法删除dom元素,而是让datatable.fnDraw()根据从数据库中获得的数据来处理添加和删除列。

这是一个老问题,所以我不确定当时api是否可用。这个问题似乎和这个SO问题相似,但如果没有细节,很难判断。

您的问题可能是从DOM中删除数据而不从DataTable中删除。他们的文档中说要以这种方式删除数据:

var table = $('#example').DataTable();
 
$('#example tbody').on( 'click', 'img.icon-delete', function () {
    table
        .row( $(this).parents('tr') )
        .remove()
        .draw();
} );

DOM通过.draw()命令反映更改,并通过.row().remove() api调用删除带有datatable的行。

最新更新