2016-08-18 1 views
23

Postman (Chrome에서 열리지 않는 우편함)이 있는데 raw json을 사용하여 POST 요청을하려고합니다. PHP는 측면에서 I 1을 갖는 헤더우편 배달부와 원시 json을 통해 POST 데이터 보내기

{ 
    "foo": "bar" 
} 

, Content-Type: application/json

: 본문 탭

는 I이 몸 "원시"선택 "JSON (애플리케이션/JSON)"을 가질 지금은 print_r($_POST);을하고 있는데 빈 배열이 나타납니다.


내가 jQuery를 사용 할 경우

Array 
(
    [foo] => bar 
) 

그래서 왜 우체부 작동하지 않습니다 : 예상대로 내가 갖는

$.ajax({ 
    "type": "POST", 
    "url": "/rest/index.php", 
    "data": { 
     "foo": "bar" 
    } 
}).done(function (d) { 
    console.log(d); 
}); 

?


이죠 스크린 샷 :

enter image description here

와 헤더 :

jQuery 달리

enter image description here

+0

$ _POST 대신 var_dump()를 쓰십시오. print_r() – Deep

+0

대신 jQuery와 함께'array (1) {[ "foo"] => string (3) "bar"}' Postman과의 배열 :'array (0) {}' – smerny

+0

그래서 Postman이 요청을 보내지 않았습니다. – Deep

답변

12

읽으려면 당신이 PHP에서 디코딩해야합니다 JSON 원료.

print_r(json_decode(file_get_contents("php://in‌​put"), true)); 

php://input

는 요청 본문에서 원시 데이터를 읽을 수있는 읽기 전용 스트림입니다. 나는이 같은 문제에 직면했다

$.ajax({ 
    "url": "/rest/index.php", 
    'data': JSON.stringify({foo:'bar'}), 
    'type': 'POST', 
    'contentType': 'application/json' 
}); 
+0

Postman에서'form' 문제는 중첩 된 데이터와 배열을 처리하지 않는다는 것입니다. 내 진짜 json은 foo = bar보다 더 복잡합니다. – smerny

+1

Postman은 jQuery의 아약스처럼 행동 할 수 없으며 Postman과 같은 jQuery의 아약스 작업을 다음과 같은 속성으로 사용해야한다고 생각됩니다. 'data': JSON.stringify ({foo : 'bar'}), 'contentType': ' application/json '...'그리고 나서 위와 같이'file_get_contents()'를 사용하면 jquery ajax와 postman의 raw json 모두에서 작동합니다. 감사합니다 – smerny

+0

예 exaclty 게시 json 대 게시물 변수가 다릅니다 – meda

2

:

foo=bar&foo2=bar2 

원시 jsonjquery에 게시하려면 :

$_POST 당신은 사용 후 postmanform 라디오 버튼으로 전환해야합니다, 폼 변수입니다 다음 코드가 나를 위해 일했다

$params = (array) json_decode(file_get_contents('php://input'), TRUE); print_r($params);

+0

이 하나만 도왔습니다. – Tauras

+0

도움이 된 것을 기쁘게 생각합니다. – Neo

4

meda의 답변은 완전히 합법적이지만 코드를 복사 할 때 오류가 발생했습니다!

어딘가에 "php://input"에 잘못된 문자가 있습니다 (따옴표 중 하나 일 수 있습니다).

"php://input" 코드를 수동으로 입력하면 효과가있었습니다. 알아 내서 잠시 나갔습니다!

관련 문제