Php Datatable全局搜索引发偶发ajax错误
我有两个页面,分别有3个和4个数据表 我需要用一个全局搜索框替换每个datatable的默认搜索框 到目前为止,我已经很好地实现了这一点,我设置了全局搜索框并隐藏了各个搜索框,如下所示:Php Datatable全局搜索引发偶发ajax错误,php,jquery,laravel,datatable,laravel-5.5,Php,Jquery,Laravel,Datatable,Laravel 5.5,我有两个页面,分别有3个和4个数据表 我需要用一个全局搜索框替换每个datatable的默认搜索框 到目前为止,我已经很好地实现了这一点,我设置了全局搜索框并隐藏了各个搜索框,如下所示: //Other JS to initialise datatables with Ajax serverside processing $(".dataTables_filter").hide(); $("#datatable-search").keyup(function() { $(".data
//Other JS to initialise datatables with Ajax serverside processing
$(".dataTables_filter").hide();
$("#datatable-search").keyup(function() {
$(".dataTable").DataTable().search($(this).val()).draw();
});
datatables使用ajax调用在服务器端加载信息
当它只是一个datatable时,我没有这个问题,但是通过对所有datatable的全局搜索,我偶尔会遇到ajax错误,这是由服务器端的500个错误引起的。
使用开发者工具控制台,我可以看到哪些调用失败,但是我可以稍后打开/运行它们
该项目使用Laravel,因此检查Laravel日志,我看到:
[2017-11-06 00:03:50]生产。错误:未指定应用程序加密密钥
这表明我没有在.env
文件中设置应用程序密钥-但是,我设置了。我的应用程序的其余部分工作正常,甚至打字速度也很慢,这似乎是调用量造成的,但我不明白为什么
我只需快速点击退格几次,就可以很容易地重现这个问题
我可以将错误重定向到控制台,但我想先尝试解决错误。这个错误目前只出现在我的本地环境中,我还没有在生产环境中尝试过——尽管我认为我将面临类似的问题
我曾考虑在搜索当前的keyup
完成之前禁用文本输入,但这是一种侵入性很强的方式,对用户体验不太友好
最好的办法是什么?是否有一种方法可以“排队”ajax调用?给用户一些时间键入
// 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
});
编辑:更正了小错误。我非常喜欢这个想法,但是当我开始键入时,它会导致控制台错误:未捕获类型错误:无法读取未定义的属性“toLowerCase”-跟踪它,它来自此行
$(“.dataTable”).dataTable().search($(this.val()).draw()代码>啊,啊。这是因为$(this)
的上下文发生了变化。一切都很好-这是伟大的作品!只需交换$(“.dataTable”).dataTable().search($(this.val()).draw()代码>到$(“.dataTable”).dataTable().search($(“#dataTable search”).val()).draw()是的,对不起,我错过了。您还应该中止任何活动的ajax请求。但是我不确定在哪里可以获得ajax对象。