AJAX / XHR JSON Daten per POST an PHP Skript schicken

Wenn man Daten auf dem Server an eine PHP Datei schicken möchte, bietet es sich an einen Javascript AJAX Call zu machen. Dann werden die Daten asynchron an den Server geschickt und man handled im Frontend die Antwort. Bei großen JSON Datenmengen sollte man POST als Methode wählen, da bei GET Requests die Zeichenzahl / Datenmenge begrenzt ist.

Mit diesem einfachen vanilla Javascript Beispiel werden JSON Beispiel Daten per POST ohne eine andere Bibliothek (ohne fetch) an ein PHP Skript geschickt:

const json_dummy_data = {
	'name'        : 'Maximilian',
	'family_name' : 'Mustermann',
	'age'         : 45,
};
 
// === AJAX / XHR Object vorbereiten
const xhttp = new XMLHttpRequest();
xhttp.open( 'POST', '/post-data-dummy.php', true );
xhttp.setRequestHeader( 'Content-Type', 'application/json' );
xhttp.onreadystatechange = function() {
	const is_success = (this.readyState == 4 && this.status == 200) ? true : false;
 
	// Handling, wenn eine erfolgreiche Antwort kam
	if( is_success ) {
		// Das Beispiel geht davon aus, dass auch JSON-Daten zurück kommen
		// Mit diesem Block wird geprüft ob die Antwort verwertet werden kann
		// Bei möglichen PHP Fehlern kann die Antwort nicht geparsed werden
		try {
			const response_json = JSON.parse( this.response );
			console.log( "=== Antwort vom Server ===" );
			console.log( response_json );
 
		} catch (e) {
			console.log( "=== Möglicher Fehler auf dem Server oder in der Antwort ===" );
			console.log( this.responseText );
		}
		return true;
	}
};
 
// === AJAX POST ausführen
const data_to_post = JSON.stringify( json_dummy_data );
xhttp.send( data_to_post );

ACHTUNG: PHPs $_POST Super-Global unterstützt nicht, dass JSON Daten einfach so geschickt werden. Mit dem Javascript AJAX Beispiel bleibt die $_POST Variable leer. PHPs $_POST Variable unterstützt nur application/x-www-form-urlencoded und multipart/form-data als Header. Siehe offizielle $_POST Dokumentation.

In diesem Beispiel Skript kann man sehen, wie man dennoch an die AJAX JSON-POST-Daten ran kommt, auch wenn $_POST leer ist und nichts anzeigt.

/* ======================================= *\
	C O N F I G
\* ======================================= */
$data_as_string = file_get_contents('php://input'); // Hier kommen die POST Daten vom AJAX
$as_assoc_array = true;
$data_as_array  = json_decode( $data_as_string, $as_assoc_array ); // Nutzbar machen fürs PHP
 
/* -->
	$data_as_array = [
		'name'        => 'Maximilian',
		'family_name' => 'Mustermann',
		'age'         => 45,
	]
 */
 
/* ======================================= *\
	R E S P O N S E
\* ======================================= */
header( 'Content-Type: application/json; charset=utf-8' );
 
$return_array = [
	'debug' => [
		'php://input' => $data_as_array,
		'$_POST'      => $_POST, // <-- Trotz POST wird es leer sein
		'$_GET'       => $_GET,
	],
];
 
echo json_encode( $return_array, JSON_PRETTY_PRINT );

Page Tools