数据全局搜索偶尔抛出ajax错误

时间:2017-11-05 23:55:37

标签: php jquery laravel datatable laravel-5.5

我有2页,分别有3个和4个数据表。

我需要用一个全局搜索框替换每个数据表的默认搜索框。

到目前为止,我已经实现了这一点,我设置了全局搜索框并隐藏了各个搜索框:

//Other JS to initialise datatables with Ajax serverside processing

$(".dataTables_filter").hide();

$("#datatable-search").keyup(function() {
    $(".dataTable").DataTable().search($(this).val()).draw();
});

数据表正在使用ajax调用来加载服务器端信息。

当它只是一个数据表时,我没有这个问题,但是对于所有数据表的全局搜索,我偶尔会遇到ajax错误 - 由500错误服务器端引起。 使用开发人员工具控制台,我可以看到哪些调用失败,但我可以稍后打开/运行它们。

该项目使用Laravel,因此检查Laravel日志,我看到了:

  

[2017-11-06 00:03:50] production.ERROR:未指定应用程序加密密钥。

这表明我没有在我的.env文件中设置应用程序密钥 - 但是,我有。我的应用程序的其余部分工作正常,甚至打字慢慢地工作正常 - 看起来调用量会导致这种情况发生,但我无法理解为什么......

我可以通过快速点击退格几次来轻松地重新创建问题。

我可以将错误重定向到控制台,但我想尝试先解决错误。该错误目前仅在我的本地环境中,我还没有在生产中尝试过 - 尽管我认为我将面临类似的问题。

我考虑在搜索当前keyup之前禁用文本输入,但这非常具有侵入性,而且对用户界面不太友好。

最好的方法是什么?有没有办法'排队'ajax调用?

1 个答案:

答案 0 :(得分:3)

给用户一些时间来输入。

// Typing timeout
var typingTimeout = null;
// On keyup
$("#datatable-search").keyup(function() {
    // Clear previous timer
    clearTimeout(typingTimeout);
    // Set a new timer
    var that = this;
    typingTimeout = setTimeout(function(){
        $(".dataTable").DataTable().search($(that).val()).draw();
    }, 200); // Execute the search if user paused for 200 ms
});

修改:纠正了小错误。