CakePHP + AjaxでのPOSTで受け取った情報が空になる原因

   

Ajaxでフォームから情報を取得して、CakePHPで作成したAPIのエントリポイントにPOSTをした時、どうしてもCakePHP側の$this->request->dataが空になるときの対応です。

以下の様なAjaxのコードがあったとします。

$.ajax({
	type: 'POST',
	url: '/Ajax/postsample',
	data: {
		'id':11111, 'string':'hogehoge',
	},
	success: function(response){
		alert('成功');
	},
	error: function(response){
		alert('失敗');
	}
});

 

CakePHP側では$this->request->dataの内容が、以下のようになって欲しいです。これが空になるときの原因です。

'id' => 11111,
'string' => 'hogehoge'

 

 

チェック項目が幾つかあります。

■Securityコンポーネントが邪魔をしている

Securityコンポーネントが邪魔をしているときがあります。CakePHPのSecurityコンポーネント使っていると、Ajaxで動的にフォームを書き換えたりとかするとエラーになったります。受け取る側のコントローラのBeforeFilterでSecurityComponentを一時的に無効にしましょう。対象のアクションのみ無効にする例です。

if ($this->params['action'] == アクション名) {
	$this->Security->csrfCheck = false;
	$this->Security->validatePost = false;
}

 

■AjaxのDataTypeの指定間違い

確認すると、APIにアクセスした時のMIMEが正しくないとだめ。とあります。省略すると自動で判断してくれるみたいです。指定すると「渡された配列が空」になることがあります。

Ajaxの記述に「DataType」のオプションが書いて有るときは一旦外してみると良いかもしれません。

 

megane

megane

最近、個人事業主から法人へと進化しました。 エンジニア歴13年位です。PHPとかMysqlを使ってWebシステムを構築します。 Javaも書きます。 CakePHPも使います。 サーバのチューニングもごりごりやります。 あと、お肉と自動車が好きです。Twitterとか申請どうぞ。

 - CakePHP, jQuery