cakephp从控制器刷新视图

时间:2013-12-23 23:20:02

标签: php cakephp

我是CakePHP的新手。假设是一个简单的任务,但我遇到了问题。我有一个控制器,通过遍历给定的目录将记录放入数据库 - 一切顺利。现在在视图中,我想显示操作的进度(有数千条记录,所以它会持续一段时间)。

我已经在控制器中有一个计数器($countFound$countSaved$countDiff)并将它们设置为在视图中输出,但它没有更新。我试过了

$this->Session->setFlash()
从循环内部

,但只有在操作完成后才会显示这些闪烁。

1 个答案:

答案 0 :(得分:0)

您需要在控制器中使用Javascript和Ajax以及一些自定义方法来模拟视图中的RealTime更新。

尝试使用Jquery的ajax方法定期检查是否有新记录(setInterval + $ .ajax将向自定义控制器方法提供最后显示的记录,控制器方法检查是否有任何新记录,如果返回它或什么都没有,同时在Jquery的ajax回调过程中控制器方法的结果并显示记录,如果有的话)

类似这样的事情

    setInterval(function(){
      $.get(url, {lastrecordID:_id}, function(data){
        if(data !== "undefined") // append to the dom 
             dom.append(data).fadeIn();
      });
    },250);

url,_id和dom是应根据上下文动态填充的js数据。

如果你想只显示记录数,那么每xx毫秒要求新记录并更新字段

var dom = $('.directoriesCount');
setInterval(function(){
          $.get('directories/countupdate', {}, function(data){
            dom.empty().append(data);
          });
        },250);

在目录控制器中:

public function countupdate() {
    return $this->Directory->find('count');
}

我没有考虑性能,因此如果经常使用包含视图,您可能希望优化计数查询或增加更新之间的间隔。