der henry: PHP send json JS

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 !!!!

  1. 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

    --
    sumpsi - posui - obstruxi
  2. 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

  3. 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ß,

    --
    a.k.a. André