Como recuperar a carga útil do pedido

118

Estou usando PHP , ExtJS e ajax store .

Ele envia dados (na criação, atualização, destruição) não em POST ou GET. No console do Chrome , vejo meus parâmetros de saída como JSON no campo " Solicitar carga útil ". $ _POST e $ _GET estão vazios.

Como recuperá-lo em PHP?

nkuhta
fonte

Respostas:

257

Se entendi bem a situação, você está apenas passando dados json pelo corpo http, em vez de application/x-www-form-urlencodeddados.

Você pode buscar esses dados com este snippet:

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

Se você está passando json, pode fazer:

$data = json_decode($request_body);

$data então contém os dados json é a matriz php.

php://inputé um chamado invólucro .

php: // input é um fluxo somente leitura que permite a você ler dados brutos do corpo da solicitação. No caso de solicitações POST, é preferível usar php: // input em vez de $ HTTP_RAW_POST_DATA, pois não depende de diretivas especiais do php.ini. Além disso, para os casos em que $ HTTP_RAW_POST_DATA não é preenchido por padrão, é uma alternativa potencialmente menos intensiva de memória para ativar always_populate_raw_post_data. php: // input não está disponível com enctype = "multipart / form-data".

Ikke
fonte
2
Eu poderia recuperar dados. Obrigado. !
nkuhta
7
Muito obrigado! Há dias procuro essa resposta e pensei que estava louco.
Zacho
o cabeçalho é application / json
Angelin Nadar
@AngelinNadar Então esta resposta se aplica.
Ikke
Se estiver usando o Laravel, simplesmente crie uma função auxiliar que 1. recupere esta string e 2. json_decode-a. Então, não será diferente de um array de Input :: all (); Por outro lado, isso provavelmente funcionaria para todos os outros também.
Michael J. Calkins
12

Além disso, você pode configurar extJs writercom e ele enviará dados regularmente (e, portanto, você será capaz de recuperar dados via e ).encode: true$_POST$_GET

... os valores serão enviados como parte dos parâmetros de solicitação, em oposição a uma postagem bruta (via documentos para a configuração de codificação de Ext.data.writer.Json)

ATUALIZAR

Os documentos também dizem que:

A opção de codificação só deve ser definida como verdadeira quando uma raiz é definida

Então, provavelmente, writera rootconfiguração de é necessária.

Homem Molecular
fonte
@NikitaKuhta, você definiu writera configuração de root? Pode ser necessário. encodefunciona para mim imageshack.us/f/32/20120308153201.png
Molecular Man