요청 페이로드를 검색하는 방법


118

PHP , ExtJSajax store를 사용 하고 있습니다 .

POST 또는 GET이 아닌 데이터 (생성, 업데이트, 삭제시)를 보냅니다. 에서 크롬 콘솔 나는 "에서 JSON으로 보내는 PARAMS를 참조 요청 페이로드 "필드. $ _POST$ _GET 이 비어 있습니다.

PHP에서 검색하는 방법?

답변:


257

상황을 올바르게 이해하면 데이터 대신 http 본문을 통해 json 데이터를 전달하는 것입니다 application/x-www-form-urlencoded.

이 스 니펫으로이 데이터를 가져올 수 있습니다.

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

json을 전달하는 경우 다음을 수행 할 수 있습니다.

$data = json_decode($request_body);

$data 그런 다음 json 데이터가 PHP 배열입니다.

php://input소위 래퍼 입니다.

php : // input은 요청 본문에서 원시 데이터를 읽을 수있는 읽기 전용 스트림입니다. POST 요청의 경우 특수 php.ini 지시문에 의존하지 않으므로 $ HTTP_RAW_POST_DATA 대신 php : // input을 사용하는 것이 좋습니다. 또한 $ HTTP_RAW_POST_DATA가 기본적으로 채워지지 않은 경우 always_populate_raw_post_data를 활성화하는 것보다 잠재적으로 메모리 집약적 인 대안입니다. php : // input은 enctype = "multipart / form-data"에서 사용할 수 없습니다.


2
데이터를 검색 할 수 있습니다. 감사. !
nkuhta

7
정말 고맙습니다! 나는 며칠 동안이 답변을 찾고 있었고 내가 미쳤다고 생각했습니다.
Zacho

헤더는 응용 프로그램 / JSON입니다
Angelin Nadar

@AngelinNadar 그렇다면이 답변이 적용됩니다.
Ikke

Laravel을 사용하는 경우 1.이 문자열을 검색하고 2. json_decode하는 도우미 함수를 만듭니다. 그러면 Input :: all ();의 배열과 다르지 않습니다. 측면에서 이것은 아마도 다른 모든 사람들에게도 효과가있을 것입니다.
Michael J. Calkins 2013 년

12

또한 당신은 설정의 ExtJS 수 writer와 는 정기적으로 데이터를 전송하고 (그러므로, 그리고, 당신은을 통해 데이터를 검색 할 수 및 ).encode: true$_POST$_GET

... 값은 원시 게시물이 아닌 요청 매개 변수의 일부로 전송됩니다 ( Ext.data.writer.Json의 인코딩 구성에 대한 문서 를 통해 ).

최신 정보

또한 문서 는 다음과 같이 말합니다.

인코딩 옵션은 루트가 정의 된 경우에만 true로 설정해야합니다.

그래서 아마도 writerroot구성이 필요합니다.


@NikitaKuhta, writer의 루트 구성을 설정 했습니까? 필요할 수 있습니다. encode나에 대한 작업을 수행 imageshack.us/f/32/20120308153201.png
분자 남자
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.