##$_POSTには何もなかった...
るんるん気分で普通にクライアント側からAjaxしてPHPにJSONをPOSTしました。いつも通りに。
しかし、$_POSTには何も入っていませんでした...array(0)みたいな。
公式に明記されていましたが、残念ながらPHPではPOSTデータを$_POSTで受け取れるのは「application/x-www-form-urlencoded」又は「multipart/form-data」のみとのこと。
Content-Type に application/x-www-form-urlencoded あるいは multipart/form-data を用いた HTTP リクエストで、 HTTP POST メソッドから現在のスクリプトに渡された変数の連想配列です。
PHP公式 より
じゃあどうするのというと↓らしいです。
##PHPでJSONを受け取るにはこうするらしい⇒file_get_contents("php://input")
タイトルにも書いてますが、file_get_contents("php://input")するらしいです。
JSON値を受け取るサーバ側のコード
// POSTされたJSON文字列を取り出し
$json = file_get_contents("php://input");
// JSON文字列をobjectに変換
// ⇒ 第2引数をtrueにしないとハマるので注意
$contents = json_decode($json, true);
// デバッグ用にダンプ
var_dump($contents);
php://input
で送信されたbody部を意味するので、それに対してfile_get_contentsしてあげればデータ部の文字列(JSON)が取れ、あとは普通にjson_decodeすればPHPオブジェクト(連想配列)にパースできる。
一応クライアント側も書いておきます。
$.ajax({
type: "POST",
url: "./mytest-api.php",
dataType: "json",
contentType: "application/json",
data: JSON.stringify({
mytestdata: "hoge"
})
})
前も調べたから今度はちゃんと覚えよう...