4

我无法通过 ajax 从我的 rails 服务器下载文件:

我的下载控制器中有一个显示操作,send_file如果将参数传递给显示操作,它会调用该操作。

然后我有一个页面,其中有一个select下拉列表,显示服务器上的文件列表。当我选择一个值并单击下载按钮时,它会发出一个 ajax 请求,该请求会发送一个由我的下载控制器处理的 GET 请求。

查看我的服务器日志,似乎 ajax 请求正在工作,它说:

Started GET "/download?file=test.txt" for 127.0.0.1 at 2012-07-19 15:13:41 -0700
Processing by DownloadsController#show as HTML
  Parameters: {"file"=>"test.txt"}
Sent file /Users/Admin/Documents/rails_projects/test/public/data/test.txt (0.1ms)
Completed 200 OK in 0ms (ActiveRecord: 0.0ms)

但是实际上没有下载任何内容。当我实际show手动访问该页面时,该文件实际上已下载。我究竟做错了什么?

--

Javascript

 <script type="text/javascript">
    $(function() {
      $('#button').click(function() {
        var s = $("select#dropdown_select").val();
               $.ajax({
                      type: 'GET',
                      url: 'http://localhost:3000/download?file=' + s,
                      dataType: "HTML"
                      });
      })
    });
  </script>

下载控制器

def show

    filename = params[:dl]

    if(filename.nil? == false)

    path = Rails.root.join('public/data', filename)
    send_file path, :x_sendfile => true

    end
end
4

1 回答 1

8

我有同样的问题,很好,但我没有使用 JS 点击功能,而是使用了 railslink标记。

最初,在我看来,我有一个link_to标签remote: true(产生 ajax 调用)

该链接针对生成 PDF 的操作。PDF 已生成(带有 prawn 和 thinreports)并发送,但没有弹出下载对话框。

所以我删除remote: true并添加了一个target: '_self',所以它最终是这样的(我使用的是haml)

!= link_to image_tag( 'print.png' ) + (I18n.t :buttons)[:comments][:print],
    customer_comment_path(@address_book),
    { target: '_self' }

它工作得很好。

为什么不尝试使用 Rail 的link标签重写代码?

于 2012-11-01T20:28:15.743 回答