POSTで送信したデータをphpの$_POSTで受け取れない。

正しくPOSTでデータを送信できているはずなのに、受け側であるphpの$_POSTが空っぽだった。

解決策
$post_data = file_get_contents("php://input");

原因
http://www.php.net/manual/ja/ini.core.php#ini.always-populate-raw-post-data

常に $HTTP_RAW_POST_DATA にアクセス可能とします。 この変数には生の POST データが格納されています。指定しなかった場合は、 データの MIME 型が判別できない場合のみこの変数にアクセス可能となります。 しかし、生の POST データにアクセスする方法としては php://input のほうが推奨されます。 $HTTP_RAW_POST_DATA は、 enctype=”multipart/form-data” の場合には無効です。

でした

解説
指定したContent-Typeが間違っている、もしくは、指定したContent-Typeをphp(?)が判別できなかったため、php.iniの設定により$HTTP_RAW_POST_DATAに格納された。
POST データにアクセスするならphp://inputを読みにいった方が良い。

自分が実際に指定したContent-Typeはxhr.setRequestHeader("Content-Type", "application/json");でした。結局、Content-Typeが間違ってのかどうかは分からずじまい。
http://www.iana.org/assignments/media-types/application
http://www.ietf.org/rfc/rfc4627.txt

なぜこの情報を$_POSTのところに書いてくれなかったのか。。

コメントを残す

メールアドレスが公開されることはありません。