rhf*_*nnn 4 javascript ajax ruby-on-rails sendfile
我无法通过ajax从rails服务器下载文件:
我的下载控制器中有一个show动作,send_file如果将参数传递给show动作,则会调用该动作.
然后我有一个页面,其中有一个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)
Run Code Online (Sandbox Code Playgroud)
但实际上并未下载任何内容 当我实际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>
Run Code Online (Sandbox Code Playgroud)
下载控制器
def show
filename = params[:dl]
if(filename.nil? == false)
path = Rails.root.join('public/data', filename)
send_file path, :x_sendfile => true
end
end
Run Code Online (Sandbox Code Playgroud)
小智 8
我有同样的问题,很好,但我没有使用JS点击功能,我使用rails link标签.
最初,在我看来我有一个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' }
Run Code Online (Sandbox Code Playgroud)
它运作得很好.
为什么不尝试使用Rail的link标签重写代码?