Как получить данные запроса

118

Я использую PHP , ExtJS и магазин ajax .

Он отправляет данные (при создании, обновлении, уничтожении) не в POST или GET. В консоли Chrome я вижу свои исходящие параметры как JSON в поле « Request Payload ». $ _POST и $ _GET пусты.

Как получить его в PHP?

nkuhta
источник

Ответы:

258

Если я правильно понимаю ситуацию, вы просто передаете данные json через тело http, а не application/x-www-form-urlencodeddata.

Вы можете получить эти данные с помощью этого фрагмента:

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

Если вы передаете json, вы можете:

$data = json_decode($request_body);

$data затем содержит данные json - это массив php.

php://inputэто так называемая обертка .

php: // input - это поток только для чтения, который позволяет вам читать необработанные данные из тела запроса. В случае запросов POST предпочтительно использовать php: // input вместо $ HTTP_RAW_POST_DATA, поскольку это не зависит от специальных директив php.ini. Более того, для тех случаев, когда $ HTTP_RAW_POST_DATA не заполняется по умолчанию, это потенциально менее ресурсоемкая альтернатива активации always_populate_raw_post_data. php: // ввод недоступен с enctype = "multipart / form-data".

Ikke
источник
2
Я мог получить данные. Спасибо. !
nkuhta 08
7
Спасибо вам большое! Я искал этот ответ несколько дней и подумал, что сошел с ума.
Zacho
заголовок - application / json
Angelin Nadar
@AngelinNadar Тогда этот ответ применим.
Икке
Если вы используете Laravel, просто создайте вспомогательную функцию, которая 1. извлекает эту строку и 2. json_decodes ее. Тогда он будет ничем не отличаться от массива из Input :: all (); С другой стороны, это, вероятно, сработает и для всех остальных.
Майкл Дж. Калкинс
12

Также вы можете настроить extJ writerс помощью, и он будет регулярно отправлять данные (и, следовательно, вы сможете получать данные с помощью и ).encode: true$_POST$_GET

... значения будут отправлены как часть параметров запроса, в отличие от необработанного сообщения (через документы для конфигурации кодирования Ext.data.writer.Json)

ОБНОВИТЬ

Также документы говорят, что:

Параметр кодирования должен иметь значение true только в том случае, если определен корень.

Так что , возможно, writer«s rootтребуется конфигурация.

Молекулярный человек
источник
@NikitaKuhta, вы установили writerкорневую конфигурацию? Может потребоваться. encodeу меня работает imageshack.us/f/32/20120308153201.png
Molecular Man