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
<?php public function アクション名() { … … … $is_canceled = true; echo json_encode(compact('is_canceled')); exit; }
AjaxでPOST送信できないと思いきや…
CakePHP1.xで動いていたソースをCakePHP2.xに移行する際に、
AjaxによるPOST送信の箇所を触っていたところ、
Controller側でどんな値をセットしても必ず、
- ステータスコード:200
- ステータス:success
が戻ってくる、という現象が発生。
リクエストパラメータの取得方法が変更されてことに対応していなかったことが原因。
※以下、POSTの場合。
<?php // CakePHP1.x $requestParam = $this->params['form']; // CakePHP2.x $requestParam =$this->request->data;
Ajax関係無かった…