javascript fetch post json php recive data

JavaScript에서 fetch 를 이용한 post

post 전송값은 JSON

const savePostData = (data) => {
  fetch("/save", {
    method: "POST",
    mode: "cors",
    cache: "no-cache",
    credentials: "same-origin",
    headers: {
      "Content-Type": "application/json; charset=utf-8"
    },
    redirect: "follow",
    referrer: "no-referrer",
    body: JSON.stringify(data)
  })
    .then(function (response) {
      return response.json();
    })
    .then(function (data) {
      console.log(data)
    })
    .catch(function (err) {
      console.error(err);
    });
};

const handleSubmitStore = (event) => {
  const data = {
    id : 1,
    name: "Kim"
  };
  savePostData(data);
};

PHP 에서 JSON 데이터를 받을 때

save.php

$reciveData = json_decode(file_get_contents('php://input'), true, 512, JSON_THROW_ON_ERROR);
        
// 값이 없다면 에러 처리
if ($reciveData['id'] < 1 || empty($reciveData['store'])) {
    return json_encode([
        'status' => 'fail',
        'message' => '순서 또는 상점이름이 제대로 입력되지 않았습니다.'
    ], JSON_THROW_ON_ERROR, 512);
}
        
return json_encode([
	'status' => 'success',
	'message' => '입력성공'
], JSON_THROW_ON_ERROR, 512);

위 소스에서 보듯이 JSON 으로 쏜 값을 받아야 하는데 PHP에서 왜인지 $_POST 로 받으려고해도 도무지 받아지지 않았다.(전에는 이렇게 했던거 같은데;;;기억이 가물거린다.😥)

 

이게 안돼서 구글링을 엄청 했다.

 

먼저 소스는 여기를 보고 작성을 했는데 php://input 에 대해 궁금해서 더 구글링을 했다.

 

php://input 설명(PHP스쿨)

php://input 은 raw POST data를 받을때 사용합니다.
$_POST는 헤더에 포함된 POST data를 파싱한 결과를 가지지만, file_get_contents( 'php://input' ); 하면 파싱하기전 POST data을 가져옵니다.

 

+ Recent posts