2017-02-22 52 views
0

我有一个内置在Laravel中的应用程序,主页上的搜索(home.blade.php)查询数据库并将结果返回结果页面(results.blade.php)。现在该应用程序已经使用了一段时间,在多个字段中搜索到10-15K个复杂记录。我们使用Elastic搜索尽可能快地进行搜索,但它仍然需要大约10秒。Laravel请求的预加载器

我想显示一个预加载器。通常我会做到这一点使用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搜索的记录数量。

我想它是这个样子: preloader search searching php mockup

UPDATE:

它发生,我,我可以通过结果反馈作为API调用解决这个

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

};

但我想避免API调用带来的额外安全性 - 传递令牌/头文件等......我正在寻找基于Laravel/php的解决方案(如果有的话)。

+1

_“有10-15K个结果正在显示”_ - 你不觉得那是应该解决的问题吗?没有用户想要梳理通过一次显示的成千上万的搜索结果......因此,为搜索结果实施分页可能更有意义。 – CBroe

+0

结果分页。我需要一个预加载器。我已经更新了我的问题,以便更清楚。 – Leon

回答

0

只是要清楚:你的preloader工作正常,但你没有得到回应?也许这是你的控制器代码的问题。

如果这是你的问题,并且你不想传递任何类型的头文件,如令牌,使用Laravel 5.2,请定义你的路由而不分配api中间件。对于Laravel 5.3和5.4,只需在routes/web.php中定义您的路线,并且您已经设置。

+0

嗨,感谢您的建议。不,预装载器不工作。我已经更新了这个问题 – Leon