代码点火器:从视图调用模型 - 数据库内容似乎冻结

Codeigniter: calling model from view - DB content seems frozen

本文关键字:数据库 冻结 模型 点火器 视图 调用 代码      更新时间:2023-09-26

我正在尝试在我的 CI 视图中使用 javascript 每 2 秒更新一次(无需刷新)数据模型,对于我的用例,其他用户可以更改数据库内容。

    <script type="text/javascript">
    var refreshFunc = setInterval(function() {
    <?php 
    $this -> load -> model('m_cube', '', TRUE);
    $stamp = $this -> $m_cube -> stamp();
    ?>
    var stamp = "<?php echo $stamp; ?>";
    console.log(stamp);             
    }, 2000);
    refreshFunc;
    </script>

我正在使用 JS setInterval 来创建 2 秒循环,并调用 CI 模型从 Postgresql 数据库中检索数据。在简化的代码示例中,它只是要求数据库提供时间戳。问题是写入控制台的时间戳没有更新 - 有些东西卡住了。

2013-10-21 14:35:54.168-04 
2013-10-21 14:35:54.168-04 
2013-10-21 14:35:54.168-04 
... 

查询实际数据表时的行为相同 - 它不返回最新值。

为什么模型访问数据库的"冻结"版本?

它不是卡住或"冻结",而是你对之前和之后的事情有点困惑。

我没有看到你使用AJAX,所以当你的php被处理时(即,从数据库获取并分配给$stamp的数据),页面 - html,css和javascript - 尚未由服务器生成和服务,也不由浏览器输出。

这意味着在 setInterval 中,您始终具有相同的值,该值已经生成,因此您不断重新打印相同的字符串。

如果你想要继续更新,你需要不断向服务器请求数据,这就是AJAX(异步JavaScript和XML)可以很方便的地方,因为它作为与主请求分开的请求运行,所以你可以在两个不同的"级别"上工作并获取内容,而页面的其余部分保持静态(已经提供和输出)。

如果你使用的是jQUery,你可以看看$.ajax(),这使得这种事情变得非常容易。

当此脚本在服务器上运行时,它会获取模型数据并将<?php ?>标记替换为结果。因此,当涉及到客户端浏览器时,它不会每 2 秒联系一次服务器,而是每 2 秒记录一次stamp值。如果你想更新它,你应该考虑使用Ajax技术。