Come recuperare Request Payload


118

Sto usando PHP , ExtJS e ajax store .

Invia i dati (su creazione, aggiornamento, distruzione) non in POST o GET. Nella console Chrome vedo i miei parametri in uscita come JSON nel campo " Request Payload ". $ _POST e $ _GET sono vuoti.

Come recuperarlo in PHP?

Risposte:


258

Se capisco correttamente la situazione, stai solo passando i dati json attraverso il corpo http, invece dei application/x-www-form-urlencodeddati.

Puoi recuperare questi dati con questo snippet:

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

Se stai passando json, puoi fare:

$data = json_decode($request_body);

$data quindi contiene i dati json è l'array php.

php://inputè un cosiddetto wrapper .

php: // input è un flusso di sola lettura che ti consente di leggere i dati grezzi dal corpo della richiesta. Nel caso di richieste POST, è preferibile utilizzare php: // input invece di $ HTTP_RAW_POST_DATA in quanto non dipende da speciali direttive php.ini. Inoltre, per quei casi in cui $ HTTP_RAW_POST_DATA non è popolato per impostazione predefinita, è un'alternativa potenzialmente meno dispendiosa in termini di memoria all'attivazione di always_populate_raw_post_data. php: // input non è disponibile con enctype = "multipart / form-data".


2
Potrei recuperare i dati. Grazie. !
nkuhta

7
Grazie mille! Ho cercato questa risposta per giorni e ho pensato di essere pazzo.
Zacho

l'intestazione è application / json
Angelin Nadar

@AngelinNadar Allora questa risposta si applica.
Ikke

Se si utilizza Laravel, creare semplicemente una funzione di supporto che 1. recuperi questa stringa e 2. json_decodes. Quindi non sarà diverso da un array da Input :: all (); Da un lato questo probabilmente non funzionerebbe anche per tutti gli altri.
Michael J. Calkins

12

Inoltre puoi configurare extJs writercon e invierà dati regolarmente (e, quindi, sarai in grado di recuperare i dati tramite e ).encode: true$_POST$_GET

... i valori verranno inviati come parte dei parametri della richiesta invece di un post non elaborato (tramite documenti per la configurazione dell'encode di Ext.data.writer.Json)

AGGIORNARE

Anche i documenti dicono che:

L'opzione encode deve essere impostata su true solo quando viene definita una radice

Così, probabilmente, writer's rootè richiesto config.


@NikitaKuhta, hai impostato writerla configurazione di root di? Potrebbe essere necessario. encodefunziona per me imageshack.us/f/32/20120308153201.png
Molecular Man
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.