17

アプリにはさまざまなフォームがあり、それらはすべて を使用してい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 Dev Tools で呼び出しを確認すると、ヘッダーには次のように表示されます。

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 %>

また、すべての JS コードを application.js ファイル (... を除く//= require jquery) から削除しても、フォームは正しく機能しません。

私は何を取りこぼしたか?

4

2 に答える 2

26

ファイルのアップロードに AJAX を使用することはできません。つまり、通常。

ただし、この機能をリモート フォームに追加する素晴らしい gem Remotipartがあります。

gem 'remotipart', '~> 1.0'

application.js 内

//= require jquery.remotipart
于 2012-07-07T12:37:00.223 に答える
2

発生する問題は、AJAX 要求でファイルを送信できないことが原因です。

Jquery Formプラグインを使用して、プラグインによって提供される ajaxSubmit メソッドを使用して、AJAX リクエスト経由でファイルをアップロードすることを試みることができます

于 2012-07-07T12:39:14.670 に答える