【发布时间】:2011-09-11 04:29:29
【问题描述】:
基本上,当我在表单中包含和使用文件上传器时,它似乎取消了 :remote => true 功能并将操作作为 HTML 代替 JS 处理。有什么想法吗?
【问题讨论】:
标签: ruby-on-rails ajax ruby-on-rails-3 jquery
基本上,当我在表单中包含和使用文件上传器时,它似乎取消了 :remote => true 功能并将操作作为 HTML 代替 JS 处理。有什么想法吗?
【问题讨论】:
标签: ruby-on-rails ajax ruby-on-rails-3 jquery
我刚刚遇到了同样的问题,并找到了以下替代方法来使其正常工作:
Gem remotipart => http://www.alfajango.com/blog/rails-3-ajax-file-uploads-with-remotipart/
jQuery 插件 'jaxy' => https://github.com/adamlogic/jquery-jaxy
我认为我更喜欢第一个选项。但是有选择是好的。 =)
【讨论】:
您不能通过 AJAX 上传文件,因此您的请求显然是纯 HTML,因为您没有任何特定于 :js 的内容,并且 rails 认为这只是一个纯 HTML POST 请求。
https://github.com/JangoSteve/remotipart
gem 'remotipart', '~> 1.2'
然后bundle install
//= require jquery.remotipart
sample_layout.html.erb
<%= form_for @sample, :html => { :multipart => true }, :remote => true do |f| %>
<div class="field">
<%= f.label :file %>
<%= f.file_field :file %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
在控制器中
def create
respond_to do |format|
if @sample.save
format.js
end
end
end
create.js.erb
// Display a Javascript alert
alert('success!');
<% if remotipart_submitted? %>
alert('submitted via remotipart')
<% else %>
alert('submitted via native jquery-ujs')
<% end %>
【讨论】:
AJAX 图像上传不起作用,至少不是以标准方式。
有更新的 HTML5 技术使其工作,以及使用 <iframe> 的变通方法
有一个很棒的库,可以使用进度表执行多个文件 ajax 上传,并根据浏览器降级以使用不同的技术。
AJAX 上传库:http://valums.com/ajax-upload/
这需要一些额外的工作,但结果会非常好!
【讨论】: