Kontynuacja naszej pracy nad odczytywaniem JSONa z AJAXa i odsyłaniem danych. Do dzieła.

Zobaczmy, co wysyłamy:

<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 postaramy się sprawdzić, czy to, co dostaliśmy, to prawidłowy JSON:

<?php 

if($_SERVER['REQUEST_METHOD'] !== 'POST')
    die('Wrong method');
if(strpos($_SERVER['CONTENT_TYPE'], "application/json;") === false)
    die('Wrong content');

$rawData = file_get_contents('php://input');

if(!$jsonData = json_decode($rawData)) {
    die('Body is not valid json');
}

Ten dziwny kod odczytuje dane z inputu i jeżeli jest dobry JSON, to przypisuje do jsonData (tam jest JEDEN znak =, na tym cała sztuczka polega), jeżeli nie – mamy fałsz przy próbie json_decode.

Teraz odeślijmy liczbę o 1 większą niż ta przysłana:

<?php 

if($_SERVER['REQUEST_METHOD'] !== 'POST')
    die('Wrong method');
if(strpos($_SERVER['CONTENT_TYPE'], "application/json;") === false)
    die('Wrong content');

$rawData = file_get_contents('php://input');

if(!$jsonData = json_decode($rawData)) {
    die('Body is not valid json');
}

header("Content-type: application/json; charset=utf-8");
echo json_encode(['msg' => ++$jsonData->playerRoll]);

Tutaj też zadbaliśmy o odesłanie poprawnego nagłówka. I tak się pracuje z JSONem…