Ruby On Rails:send_file通过jquery/ajax请求
Ruby On Rails: send_file through jquery/ajax request
我在通过ajax从rails服务器下载文件时遇到问题:
我的下载控制器中有一个show操作,如果参数被传递给show操作,它将调用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
我也遇到了同样的问题,但我没有使用JS点击功能,而是使用了rails link
标签。
最初,在我的视图中,我有一个带有remote: true
的link_to
标签(它产生ajax调用)
链接针对的是一个生成PDF的动作。生成并发送了PDF(包含对虾和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
标签重写代码呢?
相关文章:
- jQuery-通过AJAX调用动态添加具有值的表单元格
- jQuery通过步骤的自排队循环来解决延迟问题
- jQuery通过嵌套的ajax调用延迟对象
- 使用JQuery通过下拉菜单筛选HTML表值
- jQuery通过Json数组在append循环中
- jquery通过ajax验证电子邮件,然后再通过ajax提交表单
- 如何在Ember.js中使用jQuery通过id获取元素
- JQuery通过变量标识元素id:多个表行
- 使用JQuery通过下拉选择动态更改PHP值
- 使用jquery通过索引定位子级
- Jquery通过媒体查询切换窗口大小的错误
- jQuery通过滚动逐渐更改背景图像
- 如何使用jQuery通过ajax调用php类方法,但不需要任何php处理程序文件
- 使用jQuery通过更改src属性来设置一个图像标签的动画
- jQuery:通过拖放获取所选图像的名称
- 谷歌地图jQuery-通过鼠标点击获取LatLng
- jQuery:通过anchrlink滑动
- jQuery通过父函数返回$.post回调
- 使用JQuery通过ajax动态发送json格式的表单后数据
- jQuery通过按键获取sum总是落后一步