我有一个在Laravel中构建的应用程序,主页上的搜索(home.blade.php)查询数据库并在结果页面上返回结果(results.blade.php)。现在,应用程序已经使用了一段时间,在许多字段中搜索了10-15K复杂记录。我们使用弹性搜索尽可能快地进行搜索,但仍需要大约10秒钟。
我想显示预装载器。通常我会使用ajax执行此操作,或者在(窗口).load完成时触发JS:
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仍然在上一个(搜索)页面上,尚未加载结果页面,因此预加载器没有出现。
是否有一个简单的解决方案来对我的Laravel控制器进行ajax调用,并在它发生时显示预加载器?理想情况下,这是一种跟踪Laravel / Eloquent搜索的记录数量的方法。
更新:
我发现我可以通过将结果作为api调用返回来解决这个问题
function resultsCall() {
$.ajax({
type: "POST",
url: './myapiroute',
data: "",
success: function() {
console.log("Loaded!");
}
})
};
但是我想避免API调用带来的额外安全性 - 传递令牌/标题等...如果有的话,我正在寻找基于Laravel / php的解决方案。