Rails 3:如何在link_to之后运行javascript

时间:2013-11-19 04:30:07

标签: javascript ruby-on-rails ajax

在我看来,我有一个link_to用于下载excel文件:

<%= link_to 'Download Excel', url_for( :controller => "my_controller", :action => "file", :format => 'xlsx', :params => params ) %>

控制器使用axlsx渲染文件,如:

  format.xlsx {
    render xlsx: 'file', filename: 'filename', disposition: 'inline'
  }

现在生成并返回该文件可能需要一些时间,所以我想告诉用户该网站的工作情况。

我在视图代码中有一个隐藏的div:

<div id="loader"><img src="/assets/loading.gif" ></div>

当有人点击链接时,我可以用这个jQuery显示div:

$('#excel_export').click(function() { 
  $("#loader").show();
});

我的问题是:文件下载开始时我怎么能.hide() div?也许是某种类型的ajax回调?

2 个答案:

答案 0 :(得分:1)

我不知道这对你有帮助。我发现此代码有助于在执行ajax请求时显示微调器。

$(document)
    .ajaxStart(function() {
        $("#loader").show();
    })
    .ajaxStop(function() {
        $('#loader').hide();
    });

您可以从以下link获取更多样本。

答案 1 :(得分:0)

您可以通过检查下载开始所需的一般时间来使用setTimeout()函数

喜欢这个

$('#excel_export').click(function() { 
  $("#loader").show();
  setTimeout($("#loader").hide();, 1000);
});

因此它会在1000毫秒后自动关闭