【问题标题】:Datatable global search throwing occasional ajax error数据表全局搜索偶尔会引发 ajax 错误
【发布时间】:2018-04-18 02:00:10
【问题描述】:

我有 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 调用“排队”?

【问题讨论】:

    标签: php jquery laravel datatable laravel-5.5


    【解决方案1】:

    给用户一些时间来输入。

    // 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
    });
    

    编辑:小错误已更正。

    【讨论】:

    • 我非常喜欢这个想法,但是当我开始输入时它会导致控制台错误:Uncaught TypeError: Cannot read property 'toLowerCase' of undefined - 追溯它来自这一行$(".dataTable").DataTable().search($(this).val()).draw();跨度>
    • 啊啊啊啊啊。这是因为$(this) 的上下文发生了变化。一切都好 - 这很好用!只需将$(".dataTable").DataTable().search($(this).val()).draw(); 换成$(".dataTable").DataTable().search($("#datatable-search").val()).draw();
    • 是的,对不起,我错过了。您还应该中止任何活动的 ajax 请求。但我不确定你在哪里可以得到 ajax 对象。
    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 2019-11-17
    • 2022-01-07
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多