2017-02-22 9 views
0

У меня есть приложение, построенное в Laravel, поиск на домашней странице (home.blade.php) запрашивает БД и возвращает результаты на странице результатов (results.blade.php). Теперь приложение используется некоторое время, когда в нескольких полях выполняется поиск 10-15K сложных записей. Мы используем поиск Elastic, чтобы сделать поиск как можно быстрее, но он по-прежнему занимает около 10 секунд.Предзагрузчик для запросов Laravel

Я бы хотел показать предварительный загрузчик. Обычно я хотел бы сделать это с помощью Ajax, или JS вызывается, когда (окно) .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 searching php mockup

UPDATE:

Это происходит со мной, я мог бы исправить это, возвращая результат как вызов апи

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

};

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

+1

_ «отображаются 10-15K результатов» _ - вам не кажется, что это проблема, которая должна быть исправлена? Ни один пользователь не хочет расчесывать десятки тысяч результатов поиска, отображаемых за один раз ... поэтому имеет смысл реализовать разбиение на страницы для результатов поиска. – CBroe

+0

Результаты разбиты на страницы. Мне нужен предварительный загрузчик. Я уточнил свой вопрос, чтобы быть более ясным. – Leon

ответ

0

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

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

+0

Привет, спасибо за предложение. Нет, предварительный загрузчик не работает. Я обновил вопрос – Leon

Смежные вопросы