Ajaxを使ってPOST送信

jQuery

$.ajaxでデータを送る

  • 構文
$.ajax({
    type: 'POST',
    url: CakePHPのAction名,
    data: {
        '渡したいデータ名': データの値
    },
    success: function(response) {
    }
    error: function(xhr, status, error) {
    }

/*
xhr.status:エラーコードを確認できる
status:エラー
error:エラーメッセージ("Internal Server Error"等)
*/
Viewでぼんやりとメッセージを表示させる
  • jQuery
    • fadeIn() fadeOut()とsetTimeOut()を使う
  • HTML
<div id='message_canceled' style="display:none;">キャンセルしました</div>
<div id='message_not_canceled' style="display:none;">キャンセルできませんでした</div>

完成形

$.ajax({
    type: 'POST',
    url: url_mychuno,
    data: {
        'user_ids': mychuno_user_ids
    },
    success: function(res_json) {
        var res = $.parseJSON(res_json);
        if (res.is_canceled) {
            message_id = '#message_canceled';
        } else {
            message_id = '#message_not_canceled';
        }
        $(message_id).fadeIn(1000);
        setTimeout(function(){
            $(message_id).fadeOut("slow");
        }, 2000);
        setTimeout(function(){
            location.reload();
        }, 3000);
    },
    error: function() {
    }
});
エラーチェックしたい場合
error: function(XMLHttpRequest, textStatus, errorThrown) {
         alert(XMLHttpRequest.status);
         alert(textStatus);
         alert(errorThrown.message);
}

CakePHP

  • jQueryに渡したいデータの設定
    • jQueryの$.ajax内のURLで設定されたアクションの中
<?php
public function アクション名() {

…
…
…
    $is_canceled = true;
    echo json_encode(compact('is_canceled'));
    exit;

}

AjaxでPOST送信できないと思いきや…

CakePHP1.xで動いていたソースをCakePHP2.xに移行する際に、
AjaxによるPOST送信の箇所を触っていたところ、
Controller側でどんな値をセットしても必ず、

が戻ってくる、という現象が発生。

リクエストパラメータの取得方法が変更されてことに対応していなかったことが原因。
※以下、POSTの場合。

<?php

// CakePHP1.x 
$requestParam = $this->params['form'];

// CakePHP2.x
$requestParam =$this->request->data;


Ajax関係無かった…