Показывать спиннер / загрузчик в форме, отправлять в Rails и отображать перенаправленную страницу - PullRequest
0 голосов
/ 20 апреля 2020

Я новичок в Ruby и Rails и ищу несколько советов ниже требования.
На странице HTML есть кнопка, которая вызывает функцию JS. Эта функция JS отправляет форму после проверки. В контроллере ruby он вставляет строку в таблицу, а затем redirect_to action с параметром id.

Требуется показать загрузчик / вращатель CSS до тех пор, пока не произойдет перенаправление, и отобразить перенаправленный page.

До сих пор пробовал:
1. Использовал jQuery событие отправки формы для отображения загрузчика (показывает) и вызывается Ajax функция, которая скрывает загрузчик на полную. При завершении событие получает ответ в виде HTML содержимого, поскольку запрос был перенаправлен на другую страницу (браузер автоматически обрабатывает 302 запроса). Проблема в том, что он остается на той же странице. В средствах разработки браузера я вижу запрос перенаправленным.
2. На этой странице есть один параметр, но он работает только с кнопкой, которая отличается от ожидаемого требования. https://gorails.com/episodes/button-loading-animations-with-jquery-ujs
3. Ajax ловушки событий жизненного цикла, я думаю, не будут работать, потому что это событие отправки формы. rails link_to с удаленным => true и jquery при нажатии

выбор. html .erb

<div class="loader"></div> <!-- display: none -->

<form action="/controller/redirectFunction" method="POST" id="idForm">
  <!-- some form elements -->

  <button type="submit" id="btnSubmit" class="btn btn-primary" >Submit</button>
</form>

jsFile. js

$('#idForm').submit((e) => {

  e.preventDefault();

  const post_url = $(this).attr("action");
  const request_method = $(this).attr("method");
  const form_data = $(this).serialize();

  if (isValid()) {
    showLoader('.loader'); // display: block - it works

    $.ajax({
        url : post_url,
        type: request_method,
        data : form_data,
        complete: (xhr, status) => {
            console.log(xhr); // <--< this shows redirected HTML contents
            hideLoader('.loader'); // <--< this works
        }
    });
  }
});

controller.rb

def redirectFunction
  # save record here
  redirect_to action: "show", id: recordId
end
--------------------

def show
  # Call another REST APIs to get some details based on the selection on selection.html.erb page.
  # This renders or generate HTML contents (in this case) for show.html.erb page.
end

Любые входы или решения будут заметны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...