SubmitでもリンクでもないAjax Cakephpでevent系の非同期処理

第3のAjax eventタイプのユーザーアクション

changeイベントとAjaxリクエスト

Ajaxアプリの形態に以下のものがある。

・フォームタイプ
・リンクタイプ

フォームのsubmitボタンを押して非同期で処理を行うアプリケーションとリンクをクリックすることで処理を行うタイプの2種類がある。が、このどちらのタイプにも属さないAjaxパターンも存在し、例えば、

・ある場所にマウスを載せるとイベントを開始
・テキストボックスからカーソルを移動するとイベントを開始

など様々なイベントでAjax処理を開始することができる(フォームタイプのAjaxメールフォームのエントリーがあるので参考にしてほしい)。

本エントリーでは、Cakephpのjs helperを利用して実装可能な、

テキストボックスのvalueに変更を加えカーソルを移動した際にイベントを開始

するサンプルを載せてみようと思う。

以下のコードはメールアドレスを入力するためのテキストボックスとAjaxの処理結果を表示するHTML領域を載せたviewコードになる。

echo $this->Form->label('メールアドレス');
echo $this->Form->text('email', array('id' => 'email', 'placeholder' => 'メールアドレスを記入してください'));
echo $this->Form->error('Shop.email');
echo "<div id='shop_form' style='display:none;'></div>";

emailというidが付いた上のテキストボックスに、そのidを元にeventを関連付けてるコードが以下のjs helperコードになる。

$this->Js->get('#email')->event('change', $this->Js->request(
	array('action' => 'shop_info'),
   		array('update' => '#shop_form',
			'before' => $before,
			'success' => $success,
			'error' => $error,
		        'async' => false, 
		        'dataExpression' => true,
		        'method' => 'post',
		        'evalScripts' => true,
		        'data' => $this->Js->serializeForm(array('isForm' => True, 'inline' => True))
    		)
	)
);

cssのidをキーにしてhtml要素と関連付けを行い、changeイベントをマッピングしている。また、イベントの内容として、js helperのrequestメソッドを利用してAjaxリクエスト自体を引数に与えている。第三のAjaxは上で示したコードを元に発展していけると考えている。が、js helperのeventの種類が少ない気がしている。

requestの第一引数では、AjaxのリクエストURLを指定できる。以下のようにControllerやパラメータを明示的に指定することも可能。

array('controller' => 'controller', 'action' => 'action', parameters),   

パラメータにはサーバ側でないと指定できない値もあるので、そういった値を効率的に利用できる点がjs helperを利用する大きな強みだったりする。しかし、完全にjavascriptコードをすべて生成できるというわけではないので、そのあたりがjs helperの弱点というか完全ではない点である。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

SubmitでもリンクでもないAjax Cakephpでevent系の非同期処理の記事にコメントを投稿