CakePHP2.0で作成したアプリケーションを、一定時間(1秒)ごとにアクセスしたい場合、jQueryのjQuery.get関数とsetInterval関数を使用し、CakePHP2のviewにjQueryの呼び出し手順を設定します。
動作環境
- cakephp-2.5.2
- jQuery-2.1.1
一定時間(1秒)ごとのアクセスに使用するjQueryの関数
一定時間(1秒)ごとのアクセスのために使用するjQueryの関数を次に示します。
jQuery.get( url, data, callback )
HTTP(GET)通信でページを読み込みます。シンプルなGETリクエストを送ります。
- url:
- 読み込むHTMLページのURL
- data:
- キーと値の組み合わせ
- callback:
- 通信成功時のコールバック関数
- 戻り値:
- XMLHttpRequestオブジェクト
setInterval(Function,Interval)
特定の関数を、指定した間隔で繰り返し呼び出します。
- Function:
- 関数名。 クォーテーションが必要です。
- Interval:
- 関数を呼び出す時間間隔。単位はミリ秒になります。
CakePHPのviewからのjQueryの呼び出し
jQueryの呼び出しのためにviewを設定します。具体的にはviewフォルダの viewファイルとLayouts\default.ctpを次のように変更します。
jQueryファイルは/webroot/js ディレクトリに設置しておきます。
view – app\View\Sessions\index.ctp
<!--?php $this--->Html->scriptStart(array('inline' => false)); ?> setInterval(function(){ $.get("http://localhost/cake/page", { name: "John", time: "2pm" } ); },1000); <!--?php $this--->Html->scriptEnd(); ?>
「this->Html->scriptStart」と「$this->Html->scriptEnd 」の二つのメソッドで、出力をいったんバッファしてプロパティに退避させ、それを後で出力します。この二つのメソッドの間にjQueryのコードを記述すると、scriptタグとして展開されて出力されます。上記のjQueryコードでは、PageControllerのアクションindexが1秒ごとに定期的に呼び出されます。
View – app\View\Layouts\default.ctp
<!--?php echo $this--->Html->charset(); ?> <?php echo $cakeDescription ?>: <!--?php echo $this--->Html->meta('icon'); echo $this->Html->css('cake.generic'); echo $this->fetch('meta'); echo $this->fetch('css'); echo $this->Html->script('jquery-2.1.1.min.js'); ←ここに挿入する echo $this->fetch('script'); ?>
Htmlヘルパーを使用して、「echo $this->Html->script(‘jquery-2.1.1.min.js’)」を上記のように挿入します。
上記の設定が、htmlに展開されると次のようになります。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> CakePHP: the rapid development php framework: Sessions <link href="/cake/session/favicon.ico" rel="icon" type="image/x-icon" /> <link href="/cake/session/favicon.ico" rel="shortcut icon" type="image/x-icon" /> <link href="/cake/session/css/cake.generic.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="/cake/session/js/jquery-2.1.1.min.js"></script> ←ここで設置される <script type="text/javascript"> // <![CDATA[ ←ここから展開される setInterval(function(){ $.get("http://localhost/cake/session/sessions", { name: "John", time: "2pm" } ); },1000); // ]]></script>
注:上記は見やすくするために、改行コードを挿入しています。