Uczymy się otrzymywać dane za pomocą metody POST w formacie JSON i obsługiwać takie żądania. Do dzieła.
Na początek taki oto kod:
if($_SERVER['REQUEST_METHOD'] !== 'POST')
die('Wrong method');
echo $_SERVER['CONTENT_TYPE'];
Wchodząc przez GET dostaniemy wrong method. Możemy próbować wchodzić przez formularz:
<form action="http://localhost/sometry/readpostjson.php" method="POST">
<input type="submit" value="SEND POST">
</form>
Dostaniemy taką odpowiedź:
if($_SERVER['REQUEST_METHOD'] !== 'POST')
die('Wrong method');
echo $_SERVER['CONTENT_TYPE'];
//application/x-www-form-urlencoded
Ok, spróbujmy wejść poprzez JavaScript:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
fetch("http://localhost/sometry/readpostjson.php", {
method: "POST",
body: JSON.stringify({
userId: 1,
title: "Fix my bugs",
completed: false
}),
headers: {
"Content-type": "application/json; charset=UTF-8"
}
})
.then((response) => response.json())
.then((json) => console.log(json.content, json.msg));
</script>
</body>
</html>
Musimy pamiętać, aby otworzyć ten plik na localhoście, nie jako file:///, tylko http…
Potrzebujemy jeszcze odesłać coś w formacie JSON:
<?php
if($_SERVER['REQUEST_METHOD'] !== 'POST')
die('Wrong method');
echo json_encode(["content" => $_SERVER['CONTENT_TYPE'], 'msg' => 'HI FROM PHP']);
Ok, uprośćmy nasz skrypt:
<script>
fetch("http://localhost/sometry/readpostjson.php", {
method: "POST",
body: JSON.stringify({
playerRoll: 3,
}),
headers: {
"Content-type": "application/json; charset=UTF-8"
}
})
.then((response) => response.json())
.then((json) => console.log(json.msg));
</script>
Teraz wprowadźmy mechanizm sprawdzający, czy rzeczywiście przesyłamy coś JSONem:
<?php
if($_SERVER['REQUEST_METHOD'] !== 'POST')
die('Wrong method');
if(strpos($_SERVER['CONTENT_TYPE'], "application/json;") === false)
die('Wrong content');
echo json_encode(['msg' => 'HI FROM PHP']);
Formularz da wrong content, ale AJAX dostanie odpowiedź zwrotną, którą wypisze w konsoli.
Czytanie JSONa w lekcji następnej.