PHP send json JS
der henry
- javascript
- php
0
Rolf B
0
Felix Riesterer
0
Ryuno-Ki
0
Rolf B
Hallo,
aus meiner html "Datenbanktabelle" sende ich verschiedene Befehle per fetch an PHP um die Datenbank zu ändern.
JS Fetch => PHP und wieder Bestätigung zurück PHP Rückmeldung => JS
Das JS Fetch an PHP funktioniert. Bei der Rückmeldung (PHP=>JS) bekomme ich nachfolgende Meldung im Firefox debugger.
SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data
function sendData(data)
{
fetch("datapointsEdit.php",
{
method: 'POST',
header: 'Content-Type: application/json; charset=UTF-8',
body: JSON.stringify(data),
})
.then(response => response.json())
.then(data => {
let x = data['Answer'];
alert ("Answer: " + x); })
.catch(function(err) { console.log("Error: ", err); });
}
Die Rückmeldung erzeuge ich mit PHP so.
$answer = array ('Answer' => 'saveDatapoint : OK');
echo json_encode($answer, JSON_PRETTY_PRINT);
Ich sehe den Fehler nicht ....
Vielen Dank !!!!
Hallo Henry,
ich auch nicht. Weil ich nicht an deinem PC sitze, um in den Entwicklerwerkzeugen ins Netzwerk-Tab zu schauen und die Antwort genauer zu betrachten.
These 1: Der MIME-Typ der Antwort wurde nicht auf application/json gesetzt
These 2: PHP haut dir einen Notify dazwischen
Rolf
Lieber henry,
meine Glaskugel sagt mir, dass Dein PHP einen Fehler bemängelt, der im JSON-Code zu lesen ist. Eventuell findest Du ja noch hilfreiche Hinweise im PHP-Fehlerlog.
Beweise mir das Gegenteil, indem Du hier postest, was tatsächlich als JSON-Daten in der HTTP-Response steht.
Liebe Grüße
Felix Riesterer
Moin der,
function sendData(data) { fetch("datapointsEdit.php", { method: 'POST', header: 'Content-Type: application/json; charset=UTF-8', body: JSON.stringify(data), }) .then(response => response.json()) .then(data => { let x = data['Answer']; alert ("Answer: " + x); }) .catch(function(err) { console.log("Error: ", err); }); }
Die Art und Weise, wie du den Header setzt, ist eher unüblich.
Ich würde ein Objekt als Wert statt eines Strings erwarten. Der Netzwerk-Tab in den Entwickler-Werkzeugen weiß aber Genaueres.
Du kannst auch einmal response.text() nutzen, um es zu auszugeben (damit ist data dann aber kein Objekt mehr).
Gruß,
Hallo Ryuno-Ki,
Die Art und Weise, wie du den Header setzt, ist eher unüblich.
Hab ich gar nicht gesehen. Das ist nicht unüblich, es ist einfach unwirksam. Die Option heißt headers, nicht header.
Danach erst kommt dein Einwand zum Tragen. Der Wert ist entweder ein Objekt, das pro Header eine Eigenschaft mit dem Headernamen enthält, deren Wert der Header-Inhalt ist, oder man verwendet ein Headers-Objekt.
Irgendwann bringe ich das im Selfwiki mal auf einen brauchbaren Stand. Bis dahin hilft auch die AI-Übersetzung in MDN weiter.
D.h. der Request kommt ohne Content-Type Header beim Server an, aber ich denke, das ist relativ wurscht wenn man den input-Stream selbst konsumiert und den Content-Type des Requests nicht explizit abfragt.
Rolf