Предзагрузчик для запросов Laravel

У меня есть приложение, встроенное в 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.

Я бы хотел, чтобы это выглядело примерно так: preloader search search php mockup

ОБНОВИТЬ:

Мне приходит в голову, что я мог бы исправить это, вернув результат в виде вызова API

function resultsCall() {
$.ajax({
    type: "POST",
    url: './myapiroute',
    data: "",
    success: function() {
        console.log("Loaded!");
    }
})

};

но я хотел бы избежать дополнительной безопасности, связанной с вызовами API - передачей токенов/заголовков и т. д. Я ищу решение на основе Laravel/php, если оно есть.


person Leon    schedule 22.02.2017    source источник
comment
"отображается 10-15 тысяч результатов" – вам не кажется, что это проблема, которую следует исправить? Ни один пользователь не хочет просматривать десятки тысяч результатов поиска, отображаемых за один раз… поэтому может быть более целесообразным реализовать разбивку на страницы для результатов поиска.   -  person CBroe    schedule 22.02.2017
comment
Результаты разбиты на страницы. Мне нужен прелоадер. Я обновил свой вопрос, чтобы быть более ясным.   -  person Leon    schedule 22.02.2017


Ответы (1)


Просто для ясности: ваш предварительный загрузчик работает нормально, но вы не получаете ответа? Возможно, это проблема с кодом вашего контроллера.

Если это ваш вопрос, и вы не хотите передавать какие-либо типы заголовков, например токены, используя Laravel 5.2, определите свой маршрут без назначения промежуточного программного обеспечения API. Для Laravel 5.3 и 5.4 просто определите свой маршрут в routes/web.php и все готово.

person Bernardo C.    schedule 22.02.2017
comment
Привет, спасибо за предложение. Нет, предварительный загрузчик не работает. я обновил вопрос - person Leon; 23.02.2017