@tanakashiの技術ブログ

CakePHPでajax送信、何度も書くのが面倒だったのでひとまずこれを貼ればうまくいくというまとめ。

※beforeFilterにてcsrfCheck外しています。もしcsrfCheckをtrueにしたい場合は、data[_Token][key] をajaxで一緒に送信し、trueだった場合tokenを更新してView側へ送り返す必要があります。

Source Code

Controller

public function beforeFilter() {  
    if($this->params['action'] == 'ajax_post'){  
        $this->Security->csrfCheck = false;  
    }  
}  

public function ajax_post() {  
    $this->autoRender = false;  
    if ($this->request->is('ajax')) {  
        $data = $this->request->data;  

        // ここにajaxで送られたデータお処理について書く  
            ・  
            ・  
            ・  

        // 返したい値について書く  
        return new CakeResponse(['body' => json_encode($data)]);  
    }  
}  

View

<?= $this->Form->create('ajax_post', ['id'=>'form']) ?>  
<?= $this->Form->input('name', ['type'=>'text']) ?>  
<?= $this->Form->end('submit') ?>  

javaScript

$(function(){  
    $('#form').submit(function(event){  
        event.preventDefault();  

        var $form = $('#form');  
        var param = $form.serializeArray();  

        $.ajax({  
            url: '/ControllerNames/ajax_post',  
            type:'POST',  
            dataType: 'json',  
            data: param,  
            timeout: 10000,  
        }).done(function(data) {  
            alert("成功");  
        }).fail(function(XMLHttpRequest, textStatus, errorThrown) {  
            alert("失敗");  
        });  
    });  
});  

この記事へのコメント

まだコメントはありません