Работать с удаленным: правда

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

Какой у Вас вопрос?

sawa 01.06.2018 11:31

Почему Ajax не работает, когда я пытаюсь прикрепить файл

Litrein 01.06.2018 11:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
41
1

Ответы 1

Чтобы использовать удаленный: правда, создайте файл create.js.erb в соответствующей папке просмотра и переместите всю свою функцию обработки ajax в этот файл.

Для этого вам не нужен render_status @image.errors.full_messages.

Вместо этого используйте в контроллере, как показано ниже:

respond_to do |format|
  format.html {  render_status 'ok' }
  format.js
end

Хорошо, попробую. Спасибо

Litrein 01.06.2018 11:39

@Litrein: вам необходимо соответственно обновить код обработки ajax

Chakreshwar Sharma 01.06.2018 11:41

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