cake PHP でajax通信を行う

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機能を無効化する必要があります。