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>
注:上記は見やすくするために、改行コードを挿入しています。