У меня есть приложение, встроенное в Laravel, поиск по домашней странице (home.blade.php) запрашивает БД и возвращает результаты на странице результатов (results.blade.php). В настоящее время приложение используется в течение некоторого времени, и в ряде полей выполняется поиск сложных записей размером 10-15 тыс. Мы используем Elastic search, чтобы сделать поиск максимально быстрым, но это все равно занимает около 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, если оно есть.
Просто чтобы быть ясно: ваш preloader работает нормально, но вы не получили ответ? Может быть, это проблема с кодом вашего контроллера.
Если это ваш вопрос, и вы не хотите передавать какие-либо типы заголовков, например токены, используя Laravel 5.2, определите свой маршрут без назначения промежуточного программного обеспечения API. Для Laravel 5.3 и 5.4 просто определите свой маршрут в routes/web.php
и ты уже настроен
Других решений пока нет …