Comment récupérer la charge utile de la demande

118

J'utilise PHP , ExtJS et ajax store .

Il envoie des données (lors de la création, de la mise à jour, de la destruction) pas dans POST ou GET. Dans la Chrome Console, je vois mes paramètres sortants au format JSON dans le champ " Request Payload ". $ _POST et $ _GET sont vides.

Comment le récupérer en PHP?

nkuhta
la source

Réponses:

258

Si je comprends bien la situation, vous passez simplement des données json via le corps http, au lieu de application/x-www-form-urlencodeddonnées.

Vous pouvez récupérer ces données avec cet extrait:

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

Si vous passez json, vous pouvez faire:

$data = json_decode($request_body);

$data puis contient les données json dans le tableau php.

php://inputest un soi-disant wrapper .

php: // input est un flux en lecture seule qui vous permet de lire des données brutes à partir du corps de la requête. Dans le cas des requêtes POST, il est préférable d'utiliser l'entrée php: // au lieu de $ HTTP_RAW_POST_DATA car cela ne dépend pas des directives php.ini spéciales. De plus, dans les cas où $ HTTP_RAW_POST_DATA n'est pas renseigné par défaut, c'est une alternative potentiellement moins gourmande en mémoire que l'activation de always_populate_raw_post_data. php: // l'entrée n'est pas disponible avec enctype = "multipart / form-data".

Ikke
la source
2
Je pourrais récupérer des données. Merci. !
nkuhta
7
Merci beaucoup! Je cherchais cette réponse depuis des jours et je pensais que j'étais fou.
Zacho
l'en-tête est application / json
Angelin Nadar
@AngelinNadar Alors cette réponse s'applique.
Ikke
Si vous utilisez Laravel, créez simplement une fonction d'assistance qui 1. récupère cette chaîne et 2. json_decode. Ensuite, ce ne sera pas différent d'un tableau de Input :: all (); D'un côté non, cela fonctionnerait probablement pour tout le monde aussi.
Michael J. Calkins
12

Vous pouvez également configurer extJs writeravec et il enverra des données régulièrement (et, par conséquent, vous pourrez récupérer des données via et ).encode: true$_POST$_GET

... les valeurs seront envoyées dans le cadre des paramètres de la requête par opposition à une publication brute (via la documentation pour la configuration d'encodage de Ext.data.writer.Json)

METTRE À JOUR

Les documents disent également que:

L'option d'encode ne doit être définie sur true que lorsqu'une racine est définie

Donc, probablement, writerla rootconfiguration de est requise.

Homme moléculaire
la source
@NikitaKuhta, avez-vous défini writerla configuration racine de? Cela peut être nécessaire. encodefonctionne pour moi imageshack.us/f/32/20120308153201.png
Molecular Man