Form_tag с удаленным: true не делает запрос ajax - программирование
Подтвердить что ты не робот

Form_tag с удаленным: true не делает запрос ajax

У меня в моем приложении много разных форм, все они используют 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...), форма работает некорректно.

Что я пропустил?

4b9b3361

Ответ 1

Вы не можете использовать AJAX для загрузки файлов. То есть, обычно.

Существует удивительный камень, Remotipart, который добавляет эту функциональность в ваши удаленные формы.

gem 'remotipart', '~> 1.0'

В application.js

//= require jquery.remotipart

Ответ 2

Проблема, которую вы испытываете, связана с тем, что файлы не могут быть отправлены с помощью запросов AJAX.

Вы можете использовать плагин JQuery Form для загрузки файлов через запрос AJAX с использованием метода ajaxSubmit, предоставляемого плагином