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


118

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

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

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

Ответы:


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".


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.