Текстовая область оборачивается вокруг JS при загрузке изображений с помощью плагина remotipart

Я использую плагин remotipart для загрузки изображения Ajax. Недавно я обновил версию Rails с 3.1.10 до 3.2.13. После обновления версии rails я обнаружил, что загрузка изображений ajax не работает.

У меня есть форма, которая отправляет изображение с помощью плагина remotipart и отображает ответ. Но после обновления рельсов я не могу обработать ответ. Исследуя проблему, я обнаружил, что ответ обернут блоком textarea и, таким образом, не будет обработан.

Я сослался на некоторые связанные с этим вопросы, связанные с переполнением стека, а также на проблемы, о которых сообщали пользователи gmoub на remotipart, но не смог найти решения для этой проблемы.

а именно: пост-запрос ajax отвечает элементом html при включении вложения со скрепкой

Проблема со Скрепкой и Ajax с Рельсами 3.2.8

https://github.com/JangoSteve/remotipart/issues/89

Кто-нибудь может предложить, как я могу решить эту проблему или что я делаю неправильно?

Спасибо и С уважением,

4 ответа

Вы можете сделать это в файле обратного вызова js.erb:

<% if remotipart_submitted? %>
   //this will be executed when a file is uploaded
   $("#div").html("<%= escape_javascript( render "form" ).gsub('&quot;', "'") %>");
<% else %>
   $("#div").html("<%= escape_javascript( render "form" ) %>");
<% end %>
   //Here you can put more js code

Я использовал пример кода, так как вы не публиковали свой собственный. При этом вам не нужно понижать ваш remotipart. Нашел это решение по адресу https://github.com/JangoSteve/remotipart/issues/89. Работал на меня.

Это то, что окончательно исправило проблему для меня. также отсюда: https://github.com/JangoSteve/remotipart/issues/89

Предыдущее подобное предложение с gsub генерировало для меня несколько недействительных json/js. Это решение ниже работает!

<% if remotipart_submitted? %>
 $('.form-wrapper').html("<%= j "#{render('form')}" %>");
<% else %>
 $('.form-wrapper').html("<%= j render('form') %>");
<% end %>

Надеюсь, вы нашли решение. сдачи data: {type: :script} в форме должно работать нормально

Для меня единственным решением этой проблемы было написать пользовательскую функцию отправки формы, которая отправляет Ajax-запрос с данными формы. Это не лучшее решение, потому что FormData поддерживается только новыми браузерами (IE10+).

Вот этот текст:

formAjaxSubmit = ($form, $url) ->
  $formData = new FormData($form[0])

  $.ajax(
    type: 'POST'
    url: $url
    data: $formData
    dataType: 'JSON'
    processData: false
    contentType: false # this is crucial line for $.ajax to work with formData
    error: (xhr, status, error) ->
      $.fn.process_ajax_error(null, xhr, status, error)
    success: (data, status, xhr) ->
      $.fn.process_ajax_success(null, data, status, xhr)
  )
  return false

Аргументы:

  • $ form - объект формы jQuery, такой как $('#myForm')
  • $ url - sumbission url, обычно он должен иметь значение действия формы$('#myForm').attr('action')

$.fn.process_ajax_... - это пользовательские функции обработки ответов

Другие вопросы по тегам