Codeigniter:从视图调用模型 - 数据库内容似乎已冻结

时间:2013-10-21 18:44:29

标签: javascript php codeigniter postgresql

我试图在我的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数据库中检索数据。在简化的代码示例中,它只是向DB请求时间戳。问题是写入控制台的时间戳没有更新 - 有些东西被卡住了。

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

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

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

2 个答案:

答案 0 :(得分:2)

它没有被卡住或“冻结”,而是你对之前和之后发生的事情产生了一些混淆。

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

这意味着在setInterval中你总是有相同的值,它已经生成了,因此你不断重新打印相同的字符串。

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

如果你正在使用jquery,你可以查看$.ajax(),这使得这类事情变得非常简单。

答案 1 :(得分:0)

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