我是CakePHP的新手。假设是一个简单的任务,但我遇到了问题。我有一个控制器,通过遍历给定的目录将记录放入数据库 - 一切顺利。现在在视图中,我想显示操作的进度(有数千条记录,所以它会持续一段时间)。
我已经在控制器中有一个计数器($countFound
,$countSaved
,$countDiff
)并将它们设置为在视图中输出,但它没有更新。我试过了
$this->Session->setFlash()
从循环内部,但只有在操作完成后才会显示这些闪烁。
答案 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');
}
我没有考虑性能,因此如果经常使用包含视图,您可能希望优化计数查询或增加更新之间的间隔。