У меня есть приложение, встроенное в Laravel, поиск на домашней странице (home.blade.php) запрашивает БД и возвращает результаты на странице результатов (results.blade.php). Сейчас приложение уже какое-то время используется, по ряду полей ищется 10-15 тысяч сложных записей. Мы используем эластичный поиск, чтобы сделать поиск как можно быстрее, но он по-прежнему занимает около 10 секунд.
Я хотел бы отобразить предварительный загрузчик. Обычно я делаю это с помощью ajax или JS, запускаемого, когда (window).load завершается примерно так:
var progress = setInterval(function () {
var $bar = $("#bar");
if ($bar.width() >= 600) {
clearInterval(progress);
} else {
$bar.width($bar.width() + 60);
}
$bar.text($bar.width() / 6 + "%");
if ($bar.width() / 6 == 100){
$bar.text("Still working ... " + $bar.width() / 6 + "%");
}
}, 800);
$(window).load(function() {
$("#bar").width(600);
$(".loader").fadeOut(3000);
});
НО предварительный загрузчик не появляется, потому что Laravel все еще находится на предыдущей (поисковой) странице, еще не загружая страницу результатов в процессе запроса к БД.
Есть ли простое решение для выполнения ajax-вызова моего контроллера Laravel и отображения предварительного загрузчика во время его выполнения? В идеале это способ отслеживать количество записей, которые ищет Laravel/Eloquent.
Я бы хотел, чтобы это выглядело примерно так:
ОБНОВИТЬ:
Мне приходит в голову, что я мог бы исправить это, вернув результат в виде вызова API
function resultsCall() {
$.ajax({
type: "POST",
url: './myapiroute',
data: "",
success: function() {
console.log("Loaded!");
}
})
};
но я хотел бы избежать дополнительной безопасности, связанной с вызовами API - передачей токенов/заголовков и т. д. Я ищу решение на основе Laravel/php, если оно есть.