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?

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


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.


@NikitaKuhta, ¿ha establecido writerla configuración de root? Puede ser necesario. encodesí funciona para mí imageshack.us/f/32/20120308153201.png
Molecular Man
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.