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…