Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery数据表排序与Ajax冲突_Jquery_Ruby On Rails_Datatable - Fatal编程技术网

JQuery数据表排序与Ajax冲突

JQuery数据表排序与Ajax冲突,jquery,ruby-on-rails,datatable,Jquery,Ruby On Rails,Datatable,因此,它来了: 我使用dataTable插件来显示我的html表。当我点击一列的标题时,该列被排序。它工作得很好。但当我尝试实现Ajax时,它开始有一些古怪的行为。我可以通过Ajax删除DOM文档,并且该行将从表中消失。但是在那之后,如果我单击表的标题,突然,行返回并显示出来,即使它已经在数据库中被删除了!dataTable到底是怎么回事?我怀疑jQuery remove()并没有从页面的DOM中删除实际的元素,不知何故它仍然存在,但没有显示出来。因此,当我单击标题时,数据表认为行仍然存在。我被

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

这里可能会发生很多事情之一

  • 您是否使用带有“fnServerData”的缓存管道

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

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


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

这是一个老问题,所以我不确定api当时是否可用。这个问题看起来很像,但没有细节就很难说

您的问题可能是从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的行。

我以前从未遇到过jQuery remove()的问题。单击标题是否确实再次获取数据?或者它只是对视图中内存中的内容进行排序。如果是前者,也许您必须调整dataTable的配置,以便它能够解释您在重新加载时删除了某些内容的事实?@jaydel感谢您的帮助。我阅读了dataTable站点上的文档,我认为dataTable默认从DOM获取数据。这就是为什么我如此困惑。因为我通过Firebug看到tr元素被删除了,所以当我单击列的标题时,how come元素又回来了!!这很奇怪。我的知识已经不多了。我们在桌子上使用FlexGrid(它有很多自身的限制和不透明性),但听起来你的思路是对的。@jaydel好吧,我一直在努力解决这个恼人的错误。但是没有运气。dataTable站点应该提供更好的文档。他们的文件太模糊了。但无论如何,我想我会尝试建立自己的功能,然后。谢谢你的帮助好久不见了。但是非常感谢基思。我的意思是,我使用的是纯HTML数据表,它不涉及服务器端处理。但是您提醒了我一件事,我应该使用dataTable的fnDeleteRow来删除该行,而不是jQuery的remove()。因为我使用的是Ajax调用,所以我所需要的只是将row number参数与表单数据一起传递。让控制器进一步将参数传递给js回调,从那里我调用dataTable的fnDeleteRow,并使用传递给它的行号。它就像魅力一样。非常感谢。