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?

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


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.


@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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.