Як отримати запит на корисний вантаж


118

Я використовую PHP , ExtJS та ajax store .

Він надсилає дані (створювати, оновлювати, знищувати) не в POST або GET. На консолі Chrome я бачу свої вихідні парами як JSON у полі " Запит корисної навантаження ". $ _POST і $ _GET порожні.

Як отримати його в PHP?

Відповіді:


257

Якщо я правильно розумію ситуацію, ви просто передаєте дані json через тіло http, а не application/x-www-form-urlencodedдані.

Ви можете отримати ці дані за допомогою цього фрагмента:

$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 не заповнений за замовчуванням, це потенційно менш об'ємна пам'ять, альтернатива активації завжди_populate_raw_post_data. php: // вхід недоступний з enctype = "багаточастинні / форми-дані".


2
Я міг отримати дані. Дякую. !
nkuhta

7
Дуже дякую! Я шукав цю відповідь цілими днями і думав, що я збожеволів.
Зачо

заголовок додатка / json
Angelin Nadar

@AngelinNadar Тоді ця відповідь застосовується.
Іке

Якщо ви використовуєте Laravel, просто створіть допоміжну функцію, яка 1. витягує цей рядок та 2. json_decodes його. Тоді він не буде відрізнятися від масиву з Input :: all (); З іншого боку, це, мабуть, буде працювати і для всіх інших.
Майкл Дж. Калкінс

12

Також ви можете настройки ExtJS 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.