【问题标题】:Rails send_data and Javascript handler when send_data is done当 send_data 完成时 Rails send_data 和 Javascript 处理程序
【发布时间】:2015-04-02 18:52:37
【问题描述】:

当我的 Rails 应用使用 send_data 方法完成发送文件时,我不知道如何“捕捉”事件(如果存在):

# view
= link_to 'Download!', download_path

# controller
def download
  # some logic
  send_data csv_data, filename: 'export.csv'
end

我想在我的服务器完成向客户端发送 CSV 文件时捕捉事件,以便 隐藏 loading.gif 图像,该图像在你点击下载链接(这里没有任何与 AJAX 相关的内容,要清楚)。

任何帮助将不胜感激,谢谢!

(Ruby 1.9.3,Rails 3.2.13)

类似问题(使用 cookie):Browser event when downloaded file is saved to disk


更新:

我试图监听我的链接的事件,但根本没有显示任何事件:

monitorEvents(document.body.querySelectorAll('a#export_link'));

【问题讨论】:

  • 多年来我也在寻找这个问题的答案......

标签: javascript jquery ruby-on-rails


【解决方案1】:

我认为如果你使用 jQuery 和 AJAX 发送数据会更容易

$('button').on('click', function(){
  $.post(url, {data}, success: function() { alert("DONE!"); 
  });
});

【讨论】:

  • 我知道这里会很棒,但是我无法发送文件来响应 JS 请求(javascript 安全规则)(stackoverflow.com/questions/16242359/…)
  • 使用回调怎么样? after_save :do_this, only: [:download]
  • 这是一个好的开始,但我根本没有修改数据。我只是导出了一个巨大的 price_items 列表,当我们单击下载链接时生成(您的示例是混合模型回调,如 after_save 与控制器回调,如 before_filter
  • 我尝试了您建议的版本:before_filter :send_csv_file, only: :export,但我可以在服务器的日志中看到“过滤器链因 :export 渲染或重定向而停止”
  • before_filter 不起作用,因为该代码将在您的下载代码运行之前运行。也许试试after_commit
猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多