【问题标题】:Codeigniter HTML Caching with Dynamic ContentCodeigniter HTML 缓存与动态内容
【发布时间】:2015-04-20 05:35:44
【问题描述】:

我有一个应用程序,我使用 ajax 来更新 cmets 和 Like 计数。

我正在使用 Codeigniter 页面缓存 http://www.codeigniter.com/user_guide/general/caching.html

并设置以下代码以每 60 分钟重新创建一次缓存

$this->output->cache(60);

问题是当有人输入新评论时,正在发生 DB 操作(因为 Ajax 调用),但是由于缓存的 HTML 页面,页面刷新后新插入的评论消失了。如何处理缓存以及要更改的动态内容?

【问题讨论】:

    标签: php ajax codeigniter caching


    【解决方案1】:

    缓存的主要目的是在页面加载时节省服务器资源(即服务器不需要在每次加载时都获取所有动态数据)。

    听起来您正在使用 AJAX 功能来提交数据,同时在客户端修改网页。当用户然后刷新页面时,这将从服务器获取内容,在这种情况下,原始缓存内容是在发表评论之前生成的,因此完全按照它应该的方式运行。

    如果您确实需要缓存此页面,则可以考虑删除缓存,这将强制在每次进行评论时在下一页加载时重新构建缓存。将以下代码行放置在您的控制器中(在接收 AJAX 数据的函数中)应该可以做到:

    $this->output->delete_cache('foo/bar');
    

    【讨论】:

    • 你能告诉我什么是 /foo/bar 吗?我扭曲了控制器/函数名称,它没有被删除。
    • @abdulrashid 是的,我认为它应该是控制器/功能,但我没有亲自测试过;我刚刚从 CI 文档中获得了这些信息,我现在将构建一个小示例进行测试并尽快通知您。
    • 能否确认您使用的是哪个版本的 CodeIgniter?
    • 我正在使用 CI 3。我正在阅读 codeigniter.com/user_guide/general/caching.html
    • 好的,该函数在 CI 2.2 中不存在,但在 CI 3 中存在;刚刚在本地测试过,似乎前面的 / 是控制器之前的问题。尝试更改为 'foo/bar' 其中 foo = 控制器和 bar = 加载视图的函数(即不是 ajax 函数)
    【解决方案2】:

    我找到了解决办法。

    要删除缓存文件,需要使用以下函数

    $this->output->delete_cache('CONTROLLER/FUNCTION');
    

    注意:前后没有斜线。

    在我的案例中,我在 codeigniter 中使用了自定义路由。当用户输入 example.com 时,它会被路由到 example.com/CONTROLLER/FUNCTIONNAME 以及默认的登录页面。

    所以我创建了一个新函数。请refer here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      • 2010-12-19
      • 1970-01-01
      相关资源
      最近更新 更多