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을 가져옵니다.
'프로그래밍 > PHP' 카테고리의 다른 글
PHP 프로젝트에 tailwindcss 설치하기 (0) | 2020.04.09 |
---|---|
PHP - MVC 뼈대 (0) | 2019.12.03 |
KG이니시스 결제 프로그램 PHP 7.2 버전 이상 암복호화 오류 수정 (0) | 2018.12.23 |
CS-CART 애드온 만들기 (0) | 2018.12.23 |
라라벨 설치(PHPstorm, composer) (0) | 2018.12.22 |