私はPostman(Chromeで開かないもの)を持っていて、raw jsonを使ってPOSTリクエストをやろうとしています。
「Body」タブでは、「raw」を選択して、この本文の「JSON(application/json)」を選択しています。
{
"foo": "bar"
}
ヘッダには1があります、Content-Type: application/json
PHP側では今のところprint_r($_POST);
をやっているだけで、空の配列になっています。
私がjQueryを使っているならば:
$.ajax({
"type": "POST",
"url": "/rest/index.php",
"data": {
"foo": "bar"
}
}).done(function (d) {
console.log(d);
});
私は期待どおりになっています:
Array
(
[foo] => bar
)
では、なぜPostmanと連携しないのでしょうか。
ポストマンのスクリーンショット:
ヘッダー:
jQuery
とは異なり、生のJSON
を読むためにはPHPでデコードする必要があります。
print_r(json_decode(file_get_contents("php://input"), true));
php://input
は、要求本体から生データを読み取ることを可能にする読み取り専用のストリームです。
$_POST
はフォーム変数です。form
でpostman
radiobuttonに切り替える必要があります。
foo=bar&foo2=bar2
生のjson
をjquery
とともに投稿するには、次のようにします。
$.ajax({
"url": "/rest/index.php",
'data': JSON.stringify({foo:'bar'}),
'type': 'POST',
'contentType': 'application/json'
});
medaの答えは完全に合法ですが、コードをコピーしたときにエラーが発生しました。
"php://input"
のどこかに無効な文字があります(おそらく引用符の1つですか?)。
手動で"php://input"
コードを入力したとき、それはうまくいきました。把握するためにしばらく時間がかかりました!
私は同じ問題に直面していました、以下のコードは私のために働きました:
$params = (array) json_decode(file_get_contents('php://input'), TRUE);
print_r($params);
Postmanネイティブアプリをインストールし、Chrome拡張機能は推奨されなくなりました。 (私のものは自分のウィンドウで開いていたがまだChromeアプリとして走っていた)