У меня есть модальное окно, в котором вы должны сообщить об ошибке. Итак, у меня есть HTML-код с этим окном.
<div class = "modal">
<div id = "modal-6">
<%#= render @p::ErrorReport %>
<div class = "box_m box_m_middle" style = "margin: 0 auto;">
<div class = "report_error">
<div class = "name">Report an error</div>
<div class = "arcticmodal-close close"></div>
<p class = "info_block">Some info block</p>
<div class = "error_explanation">Email is wrong</div>
<div class = "message_send">Message sent</div>
<p class = "thanks">Thank you!</p>
<div class = "form">
<%= form_for @image, url: error_create_url, method: :post, remote: true do |f| %>
<div class = "row">
<div class = "box1 blocks">
<%= f.label :name, class: "label" %>
<%= f.text_field :user, class:"int int2", placeholder: "" %>
</div><!--
/--><div class = "box2 blocks">
<%= f.label :Email, class: "label" %>
<%= f.text_field :email, class:"int int2", placeholder: "" %>
</div>
</div>
<div class = "row">
<%= f.label :Message, class: "label" %>
<%= f.text_area :message, class:"int int2", placeholder: "Please write about your problem" %>
</div>
<div class = "rows">
<div class = "box1 blocks">
<div class = "file">
<!-- <div>Attach file</div> -->
<i class = "i i_paper_clip"></i>
<%= f.file_field :file , class: 'choose_file' %>
<img id = "error_report_image">
</div>
</div><!--
/--><div class = "box2 blocks">
<%= f.submit "Send", class: 'btn btn_middle btn_radius5' %>
</div>
</div>
<% end %>
</div>
</div>
</div>
</div>
</div>
У меня есть код js, который обрабатывает Ajax из этого модального окна. Чтобы использовать Ajax, я использую remote: true.
function error_report_init(){
var modal6 = $('#modal-6')
var incorrect_mail = $('.error_explanation')
error.click(function(){
error_show()
})
$('body').on('ajax:success', function(data, status, xhr) {
if (status == 'ok') {
console.info('status: ', status)
incorrect_mail.hide()
modal6.find('.form').hide()
modal6.find('.report_error .message_send').show()
modal6.find('.report_error .thanks').show()
modal6.find('.info_block').hide()
modal6.find('.name').hide()
} else {
incorrect_mail.show()
}
})
$('body').on('ajax:error', function(data, status, xhr) {
})
}
И контроллер
class Desktop::Vision::ErrorController < CatalogController
domain_layout 'page_screen'
def form
@image = Image.new
end
def create
@image = Image.new(image_params)
if @image.save
::Mailer::FromSite.error_report(@image).deliver_later
# Mailer::FromSite.error_report_alias(@image).deliver_later
render_status 'ok'
else
render_status @image.errors.full_messages
end
end
end
def reported
end
private
def image_params
params.require(:image).permit(:user, :email, :message, :file)
end
def render_status status
render plain: status
return
end
end
И проблема в том, что, если я пытаюсь заполнить поля, все идет нормально, и я получаю еще одно модальное окно с надписью «Сообщение отправлено». Но когда я пытаюсь прикрепить какой-то файл, все идет плохо, и remote: true работает очень странно. Потому что я получаю не модальное окно и получаю только ответ контроллера на другой новой странице: «render_status 'ok'» или «render_status @ image.errors.full_messages» (когда электронная почта неверна) и Ajax не работает. Я не знаю, почему Ajax не работает, когда я пытаюсь прикрепить файл
Почему Ajax не работает, когда я пытаюсь прикрепить файл





Чтобы использовать удаленный: правда, создайте файл create.js.erb в соответствующей папке просмотра и переместите всю свою функцию обработки ajax в этот файл.
Для этого вам не нужен render_status @image.errors.full_messages.
Вместо этого используйте в контроллере, как показано ниже:
respond_to do |format|
format.html { render_status 'ok' }
format.js
end
Хорошо, попробую. Спасибо
@Litrein: вам необходимо соответственно обновить код обработки ajax
Какой у Вас вопрос?