質問: PHPフレームワークのCakePHPでwebアプリを作成しているんですがわからないことがあるので質問させてください。 AJAXの機能を取り入れて簡易的なチャットを作っているんですが $ajax->remoteTimer() のヘルパーで一定時間ごとにコントローラーのメソッドにアクセスしているんですがこのときにGETパラメータとして1つのページのコメントのカウント数を送信して、データベースのそのページのコメント数とを比較してGETの値が上回っていたらAJAXでコメント欄を更新しています。 この時に更新が確認できない場合処理を中断したいのですが、フレームワークが自動でViewテンプレートに書き出してしまうのを何とかできないかと悩んでいます。ただ処理を中断したいだけです。 フレームワークの内部を変更しないといけないでしょうか?または他にいい方法はあるでしょうか?どなたか詳しい方、助言をお願いします。
回答: 処理を勘違いしていました。すいません。 未確認ですが、こんなのはいかがでしょう? 制御をできるだけCakePHP側でやるか、JavaScript側でやるかで2種類方法があるかと思います。 JavaScript側でやるのであれば、次のような感じで、Ajax.UpdaterのonCompleteを書き換えて、もし更新した結果を返してきたら、updateContentを呼び出し内容を更新するという感じです。 動作未確認なので、あくまでイメージです。 ``` remoteTimer( array('requestHeaders' => array("onComplete: function(response, param) {if (更新あり?) { this.updateContent(); }"))); ?> ``` なるべくCakePHP側でやる方法ですが、CakePHP側でやるといっても、最終的にはprototype.jsが動くので、その仕様の範囲でしかできません。そこで、evalScriptをONにしておき、ビューが返す内容に処理を埋め込んでおくということも可能かと思います。 いかにHelperで抽象化されていたとしても、中身はprototype.jsのラッパーなので、その仕組みから考えないといけないですね。