JSON Parse Err online men INTE lokalt (XAMPP)
Jag har ett problem med JSON Parse när en JS-fil skickar fetch-anrop till en PHP-fil:
"Uncaught (in promise) SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data"
Som sagt så fungerar hela flödet offline/lokalt med XAMPP och övriga SQL+Databasanrop med PHP fungerar på min studentserver (samma studentserver tillhandahåller SQL/MariaDB online). Men när fetch-anrop görs till lokal php-fil (då lokalt på uppladad mapp på studentserver) så får jag inte tillbaka någon JSON-data i ett unikt fall som jag får tillbaka lokalt.
Detta fungerar däremot att göra mot den lokala php-filen som ska agera som en "web service":
// check if the server is working
if (isset($_GET['test'])) {
$response = array(
'message1' => 'Hello, world!',
'message2' => 'How are you doing today?'
);
echo json_encode($response);
exit();
}
Det går att testa här: http://studenter.miun.se/~maka2207/writeable/php-projekt/chat... och se korrekt JSON Parse-svar.
Här är PHP-koden i "web service"-filen (som fungerar lokalt som sagt var):
$chatData = new Chat(ConnectDB());
// Return all current chat messages for those not logged in
$msgs = $chatData->getChatMsgs();
if (isset($_SESSION['username'])) {
if (isset($_POST['msg'])) {
$chatData->insertChatMsg($_POST['msg'], $_SESSION['username']);
$chatData->updateTotalChatMsgs();
$chatData->updateTotalChatMsgsUser($_SESSION['username']);
unset($_POST['msg']);
$msgs = $chatData->getChatMsgs();
}
echo json_encode($msgs, JSON_PRETTY_PRINT);
} else {
echo json_encode($msgs, JSON_PRETTY_PRINT);
}
Detta är JS-koden som skriver ut mottaget JSON-svar:
// Initiate function that updates chat window
function writeChat(chat) {
// Empty chat window first
chatbox.innerHTML = "";
// Create each chat message before output
chat.forEach((chat) => {
// Chat message in the form of "[DATESTAMP] username (with clickable link to profile): <message>"
let msg = `<p>[${chat.chatmsg_created}] <a class="memberslink2" href="profile.php?user=${chat.chatmsg_by}">${chat.chatmsg_by}</a>: ${chat.chatmsg}</p>`;
// Output to chat window
chatbox.innerHTML += msg;
});
}
// Initiate function that retrieves chat from PHP service
function updateChat() {
fetch("chatnotgpt.php")
.then((response) => response.json())
.then((data) => writeChat(data));
}
Och det är denna JS-funktion i samma JS-fil som genomför fetch-POST-anropet:
// Function to send message in chat window (works with BOTH Enter and mouseclick)
function sendMessage(input) {
// Grab current input value after stripping some tags
// Show Alert and stop function if no message (after stripping tags)
if (stripTags(input.value) == "") {
alert("Skriv något GILTIGT först!");
return;
}
let getMsg = stripTags(input.value);
// Prepare form
let msgForm = new FormData();
msgForm.append("msg", getMsg);
// Send it!
fetch("chatnotgpt.php", {
method: "POST",
body: msgForm,
})
.then((response) => response.json())
.then((data) => writeChat(data));
// Clean input box
input.value = "";
}
Jag provat med chatGPT men inte kommit längre än testet ovan som visar att det går att få tillbaka någon slags JSON-data från anropad PHP-fil online. Jag har mejlat lärarna om problemet för jag misstänker att det borde vara något konfigurerat på studentserversidan om ALLA ÖVRIGA interna PHP-anrop fungerar på studentservern? Med "interna" menar jag att min SQL-server på studentservern tillhandahålls av samma studentserver.
Jag blir bara så besviken när jag såg att chattfunktionen fungerade offline och tänkte, "Coolt!" och så trillar jag på mållinjen och får inte till en supersimpel fetch-grej och jag vet inte varför.
Mvh,
WKL.
"Den säkraste koden är den som aldrig skrivs"
"Visste du förresten att det är ett mångmiljardbolag?"
"Jag lever inte för att koda utan kodar för att sen kunna leva"