リクエストペイロードを取得する方法


118

PHPExtJSajaxストアを使用しています

POSTまたはGETではなく、データを(作成、更新、破棄時に)送信します。ではクロームコンソール I「にJSONとしての私の発信のparamsを参照要求ペイロード」フィールド。$ _POST および$ _GETは空です。

PHPでそれを取得する方法?

回答:


257

私が状況を正しく理解していれば、application/x-www-form-urlencodedデータの代わりにjsonデータをhttp本体に渡すだけです。

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

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

jsonを渡す場合は、次のようにできます。

$data = json_decode($request_body);

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

php://inputいわゆるラッパーです。

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"では使用できません。


2
データを取得できました。ありがとう。!
nkuhta

7
どうもありがとうございます!私はこの答えを何日も探していましたが、私は頭がおかしいと思っていました。
Zacho 2012

ヘッダーはapplication / jsonです
Angelin Nadar

@AngelinNadar次に、この回答が適用されます。
Ikke

Laravelを使用する場合は、1。この文字列を取得し、2。json_decodesするヘルパー関数を作成するだけです。そうすれば、Input :: all();の配列と同じになります。一方で、これはおそらく他の誰にとってもうまくいくでしょう。
マイケルJ.カルキンス2013年

12

また、extJ writerをで設定すると、データが定期的に送信されます(したがって、およびを介してデータを取得できます )。encode: true$_POST$_GET

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

更新

また、ドキュメントはそれを言う:

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

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


@NikitaKuhta、writerのルート構成を設定しましたか?必要になる場合があります。encode私はのために仕事をしてimageshack.us/f/32/20120308153201.png
分子マン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.