cake PHP でajax通信を行うには以下ような形で実装します。
まずはjavascriptの処理を書きます。
<script> function ajaxFanction(obj) { var data = { data: $('[name=huga]').val() }; $.ajax({ url: url: "/CakeProj/Hoge/ajaxTest", type: "POST", dataType: "json", data: data, success: function (data, dataType) { //通信成功時の処理 console.log('Success : ' + data); }, error: function (data, dataType) { //通信失敗時の処理 console.log('Error : ' + data); } }); } </script>
この通信で受信したデータに対する処理をコントローラー側で書きます。
HogeController.php
class HogeController extends AppController { public function ajaxTest() { //CakePHPのレンダー機能を無効化する $this->autoRender = false; // $this->request->is('ajax') でAjax通信か判定する if ($this->request->is('ajax')) { $post_data = $this->request->getData(); $ajax_data= $post_data['data']; return " ajaxで受信したデータ:".$ajax_data['name']; } } }
$this->request->is(‘ajax’)
でAjaxによる通信かどうかを判定することができます。 また、$this->autoRender = false
とすることによって、CakePHPのrender機能を無効化することができます。 CakePHPではアクション名と紐づくViewのctpファイルを自動で出力(render)します。 この機能が有効化のままだと、関数を通った後にアクション名「ajax_test.ctp」を探しに行ってしまい、MissingViewのエラーが返ってきます。 このエラーを発生させないために、render機能を無効化する必要があります。