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.