【发布时间】:2019-01-15 22:55:27
【问题描述】:
我正在使用 DataTables 在我的网站中显示数据。为了利用它,我使用 ajax 来填充表格。以下是我的代码:
$( document ).ready(function() {
var review = $('#review').DataTable({
dom: 'B<"toolbar">frtip',
"ajax": {
"url": 'include/json_review.php',
"data": {
"filter" : "someFilter"
},
"type": 'GET',
"dataSrc": "",
"cache": true // to load page fast
}
});
});
我想使用cache: true 的原因是我目前在表中加载了 4500 多行,总计约 3.5 MB 数据。 (顺便说一句,我不能没有这个。)数据是从 MySQL 数据库加载的,并且仍在填充。在新数据可用之前一切都运行良好,我预计至少还有 20K 更多记录。 F5(刷新)不会替换缓存。 Control + F5 可以。我读到在大多数 SO 问题中, location.reload(true) 应该可以解决问题。所以我在 中添加了一个按钮来运行这个,即
$('div.toolbar').html('<button onclick="reloadData()">Refresh Data</button>'); // code inside the document.ready tags
function reloadData() {
location.reload(true);
} // code outside document.ready tags
它运行,但是当我在谷歌浏览器中检查开发者工具的网络选项卡时,它显示数据仍然是从磁盘缓存加载的。我认为问题在于,当我调用 location.reload() 函数时,它只加载 html 但 ajax 数据保持不变。
我正在考虑的一个可能的解决方案是再次调用 ajax 并将当前时间戳作为参数传递,因为这就是 cache: false 应该做的事情。那可能吗?如果有,怎么做?
我没有选择。帮忙?
更新:我尝试了另一种方法,方法是使用 table.ajax.url('include/json_review.php?_=' + time ).load(),其中时间是 $.now()。它确实向表中添加了数据,但仍然没有替换缓存。所以我基本上创建了另一个缓存。
我的解决方法:我通过覆盖 .htaccess 中的标题解决了我的问题。这和我想做的有点不同,但我不能挑剔。
<Files 'json_review.php'>
Header set Cache-Control "max-age=300"
</Files>
五分钟后,当我点击刷新或从一个页面切换到另一个页面时,浏览器会检查该 max-age。如果该 max-age 失效,则删除 ajax 缓存并再次运行 ajax,从而有效地替换它。
如果有人遇到同样的问题,我会在这里发布。我也想知道是否有更好的解决方案。
【问题讨论】:
-
你试过
$.ajaxSetup({ cache: false })然后ajax.url('same-url-with-some-random-value').load()..?这应该工作...... -
不会禁用缓存吗?
-
??这不是您想要的,在需要时禁用缓存吗?浏览器和服务器缓存也是如此,因此您必须更改 URL:
-
或使用 destroy:true 和 cache: false 重新初始化 DataTable。
标签: javascript jquery ajax caching datatables