我的应用中有很多不同的表单,所有表单都使用remote: true
。但是一个不能正常工作,因为它不使用ajax调用。
清理,看起来像:
<%= form_tag(upload_file_ajax_path, remote: true, multipart: true) do %>
<%= file_field_tag(:file) %>
<%= submit_tag("upload") %>
<%end%>
标签如下:
<form accept-charset="UTF-8" action="/mycontroller/upload_file_ajax" data-remote="true" enctype="multipart/form-data" method="post">
<input name="utf8" type="hidden" value="✓">
<input name="authenticity_token" type="hidden" value="1234"></div>
<input id="file" name="file" type="file">
<input name="commit" type="submit" value="upload">
</form>
路线条目:
post "mycontroller/upload_file_ajax", as: "upload_file_ajax"
但是,在Chrome开发工具中查看来电时,标题显示:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
并不像其他表格那样:
Accept:*/*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript
我将js文件添加到我的布局
<%= stylesheet_link_tag "application", :media => "all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
即使我从application.js文件中移除了所有JS代码(//= require jquery
除外...),表单也无法正常工作。
我错过了什么?
答案 0 :(得分:25)
您无法使用AJAX进行文件上传。也就是说,通常。
有一个很棒的宝石Remotipart,它将此功能添加到您的远程表单中。
gem 'remotipart', '~> 1.0'
在application.js
中//= require jquery.remotipart
答案 1 :(得分:2)
您遇到的问题是由于AJAX请求无法提交文件。
您可以尝试使用Jquery Form插件通过AJAX请求使用插件提供的ajaxSubmit方法上传文件