Cómo recuperar la carga útil de la solicitud

118

Estoy usando PHP , ExtJS y la tienda ajax .

Envía datos (al crear, actualizar, destruir) no en POST o GET. En la consola de Chrome , veo mis parámetros salientes como JSON en el campo " Solicitar carga útil ". $ _POST y $ _GET están vacíos.

¿Cómo recuperarlo en PHP?

nkuhta
fuente

Respuestas:

257

Si entiendo la situación correctamente, solo está pasando datos json a través del cuerpo http, en lugar de application/x-www-form-urlencodeddatos.

Puede recuperar estos datos con este fragmento:

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

Si está pasando json, puede hacer:

$data = json_decode($request_body);

$data luego contiene los datos json es la matriz php.

php://inputes un contenedor .

php: // input es un flujo de solo lectura que le permite leer datos sin procesar del cuerpo de la solicitud. En el caso de las solicitudes POST, es preferible usar php: // input en lugar de $ HTTP_RAW_POST_DATA ya que no depende de directivas php.ini especiales. Además, para aquellos casos en los que $ HTTP_RAW_POST_DATA no se rellena de forma predeterminada, es una alternativa potencialmente menos intensiva en memoria que la activación de always_populate_raw_post_data. php: // la entrada no está disponible con enctype = "multipart / form-data".

Ikke
fuente
2
Podría recuperar datos. Gracias. !
nkuhta
7
Muchas gracias! He estado buscando esta respuesta durante días y pensé que estaba loco.
Zacho
el encabezado es application / json
Angelin Nadar
@AngelinNadar Entonces se aplica esta respuesta.
Ikke
Si usa Laravel, simplemente cree una función auxiliar que 1. recupere esta cadena y 2. json_decodes. Entonces no será diferente a una matriz de Input :: all (); Por un lado, esto probablemente no funcionaría para todos los demás también.
Michael J. Calkins
12

También puede configurar extJs writercon y enviará datos regularmente (y, por lo tanto, podrá recuperar datos a través de y ).encode: true$_POST$_GET

... los valores se enviarán como parte de los parámetros de solicitud en lugar de una publicación sin procesar (a través de documentos para la configuración de codificación de Ext.data.writer.Json)

ACTUALIZAR

También los documentos dicen que:

La opción de codificación solo debe establecerse en verdadera cuando se define una raíz

Entonces, probablemente, se requiera la configuración de writer' root.

Hombre molecular
fuente
@NikitaKuhta, ¿ha establecido writerla configuración de root? Puede ser necesario. encodesí funciona para mí imageshack.us/f/32/20120308153201.png
Molecular Man