現状はremoteTimerで3秒毎に更新しています。
◇controllersの記述
debugモードを0にしないと不要なメッセージが付加されてdecode出来なくなるので、一時的にdebugモードを変更するところがミソですね。
function getAjax() {
$this->autoRender = false;
$this->uses = 'currentvalue';
$this->layout = 'ajax';
Configure::write('debug',0);
$data = $this->currentvalue->find('all');
echo json_encode($data);
}
◇viewsの記述(prototype.js使用)
OnCompleteでレスポンスを解析するのですが、firebugで確認するまでJSONデータにテーブル名が付加されるとは思っていなかったので、嵌ってしまいました。
function response_json(request,json) {
var str = request.responseText;
var obj = str.evalJSON();
for ( var i = 0; i < obj.length; i++) {
if ( eval(obj[i].currentvalue.status)) {
$(obj[i].currentvalue.name).innerHTML = "<img src='../images/green.gif' />";
} else {
$(obj[i].currentvalue.name).innerHTML = "<mg src='../images/red.gif' />";
}
}
}
<?php echo $ajax->remoteTimer(array(
'url' => 'getAjax',
'update' => null,
'complete' => 'response_json(request,json);',
'frequency' => 3));
?>
但し、リアルタイムな更新が必要な瞬時値の受け渡しについて、データ収集処理とWEBサーバー間をデータベース経由にするとデータベースのアクセス頻度が高くなるので、メモリ渡しかオンメモリデータベースでインプリメントすべきですね
0 件のコメント:
コメントを投稿