web-dev-qa-db-fra.com

Comment récupérer une charge utile de demande

J'utilise PHP , ExtJS et magasin ajax.

Il envoie des données (sur créer, mettre à jour, détruire) pas dans POST ou GET. Dans le Console Chrome je vois mes paramètres sortants comme JSON dans le "Demande Payload "champ. $ _PART et $ _GET sont vides.

Comment le récupérer en PHP?

106
nkuhta

Si je comprends bien la situation, vous ne faites que transmettre des données JSON par le biais du corps http, au lieu de application/x-www-form-urlencoded Les données.

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

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

Si vous passez JSON, alors vous pouvez faire:

$data = json_decode($request_body);

$data contient alors les données json est un tableau php.

php://input est 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 demande. Dans le cas de POST requêtes, il est préférable d'utiliser php: // input au lieu de $ HTTP_RAW_POST_DATA car cela ne dépend pas de 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. L’entrée php: // n’est pas disponible avec enctype = "multipart/form-data".

234
Ikke

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

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

MISE À JOUR

Aussi docs dire que:

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

Donc, probablement, la configuration writer de root est requise.

11
Molecular Man