Cakephpでajaxを使って非同期にすっきりpostする

CakephpでFormの値をjQueryを使って非同期にpostの値を渡してみました

まずViewでformをつくります

echo $this->Form->create('sample');
echo $this->Form->checkbox('test');
echo 
// などなど..
echo $this->Form->end();

formのsubmitイベントで、phpへpostします
jQueryのserializeをつかって、formの値をクエリ文字列にします
.serialize() | jQuery API Documentation

$('form').on('submit', function() {                                                               
    event.preventDefault();                                                                       
    event.stopPropagation();                                                                      

    $.ajax({                                                                                      
        type: 'POST',                                                                             
        url: '<?php echo $this->Html->Url(array('action'=>'save'));?>',                   
        data: { data: $(this).serialize() },                                                      
    }).done(function(data) {
        // 後処理                                                                      
    });                                                                                           
});     

コントローラーのsaveアクションへアクセス
これで
$this->data
にふつうのformのpostした値が入ってきます

public function save()
{
    $this->layout = null;
    parse_str($this->data);

    $ret = $this->SomeModel->saveAll($data);
    // などなど..
}

PHP: parse_str – Manual
で、クエリ文字列を変数に落とし込めばそのまま
$dataにまるごとデータが入ってきます
(jQueryでdata: で渡したので)

だいぶCakeらしくできた気がします

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください