【问题标题】:Reload cache of DataTables populated using ajax重新加载使用 ajax 填充的 DataTables 的缓存
【发布时间】: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


【解决方案1】:

如果你只想控制你的缓存,你可以添加一个像`"url"这样的参数:

include/json_review.php?'+Date().getTime(),

通常这会在每次日期不同时重新加载缓存

【讨论】:

  • 哦。我想我的问题并不清楚。我想要实现的是让表格使用缓存数据显示,直到用户提示它更新。您的答案将导致每次加载页面时更新表数据,不是吗? Tl:dr 我想要一个按钮来更新缓存。
猜你喜欢
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多