Текстовая область оборачивается вокруг 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('"', "'") %>");
<% 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_...
- это пользовательские функции обработки ответов