web-dev-qa-db-ja.com

要求ペイロードを取得する方法

PHPExtJSおよびajax storeを使用しています。

POSTまたはGETではなく、データを送信(作成、更新、破棄)します。 Chromeコンソールの「Request Payload」フィールドに送信パラメーターがJSONとして表示されます。 $ _ POSTおよび$ _ GETは空です。

PHPで取得する方法は?

106
nkuhta

状況を正しく理解していれば、application/x-www-form-urlencodedデータではなく、httpボディを介してJSONデータを渡すだけです。

このスニペットでこのデータを取得できます:

$request_body = file_get_contents('php://input');

Jsonを渡す場合、次のことができます。

$data = json_decode($request_body);

$dataには、jsonデータが含まれるphp配列が含まれます。

php://inputは、いわゆる wrapper です。

php:// inputは、リクエスト本文から生データを読み取ることができる読み取り専用ストリームです。 POSTリクエストの場合、特別なphp.iniディレクティブに依存しないため、$ HTTP_RAW_POST_DATAの代わりにphp:// inputを使用することをお勧めします。さらに、$ HTTP_RAW_POST_DATAがデフォルトで設定されていない場合、always_populate_raw_post_dataをアクティブ化するよりもメモリ消費量が少ない可能性があります。 php:// inputはenctype = "multipart/form-data"では使用できません。

234
Ikke

また、 writer: trueを使用してextJs encodeをセットアップすると、定期的にデータを送信します(したがって、$_POSTおよび$_GETを介してデータを取得できます)。

...値は、生のポストではなく、リクエストパラメータの一部として送信されます(Ext.data.writer.Jsonのエンコード設定では docs を使用)

更新

また、 docs と言う:

ルートが定義されている場合にのみ、エンコードオプションをtrueに設定する必要があります

したがって、おそらく、writerroot構成が必要です。

11
Molecular Man