Я новичок в 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
Любые входы или решения будут заметны.