首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理/排队多个ajax帖子?

问如何处理/排队多个ajax帖子?
EN

Stack Overflow用户
提问于 2014-05-01 15:21:31
回答 1查看 114关注 0票数 0

我在一个Rails 3.2应用程序中有一个索引视图,它在每条记录旁边显示一个删除按钮。

代码语言:javascript
复制
<%= link_to "Delete", object, method: :delete, remote: true, class: 'delete' %>

我最初创建了一个destroy.js.erb文件,用于在对象被销毁时将其删除。然而,这并没有提供我想要的快速和响应式的体验。

相反,我设置了这个coffeescript函数

代码语言:javascript
复制
jQuery ->
  if $('a.delete').length
    $("a.delete").click ->
      if confirm("Are you sure?")
        row = $(this).closest("tr").get(0)
        $.post @href,
          _method: "delete"
        , null, "script"
        $(row).hide()
        false
      else
        #they clicked no.
        false

这在99%的情况下都工作得很好。但我发现,当用户快速连续删除几个对象时,会出现一些边缘情况。虽然这些对象是隐藏的,但有些对象似乎没有被正确删除,并在页面重新加载时再次显示。

有没有更好的方法来完成这一点,或者让我的.post请求排队,这样我就可以100%地确信它们都完成了?

EN

回答 1

Stack Overflow用户

发布于 2014-05-01 15:37:09

如果您想要对任务进行排队,您可能需要考虑delayed_job gem https://github.com/collectiveidea/delayed_job。

至于在页面上保留要删除的项目的更好方法,您可以在模型上结合使用delayed_job和"pending_deletion“布尔值字段。当用户指示要删除某个对象时,对其进行标记,提交删除作业,然后运行Coffeescript函数将其隐藏。绘制视图之前的初始查询可以修改为包括pending_delete != true的对象。这对我来说似乎有点多,但如果你的删除过程很慢,或者你的队列经常被备份,这似乎是合理的。

您可能还(或者替代地)希望让您的CoffeeScript函数作为对控制器操作的响应来执行。如果Object.delete返回true,则运行函数并隐藏对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23403683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档