JSON decode
https://www.w3schools.com/php/func_json_decode.asp
https://stackoverflow.com/questions/8599595/send-json-data-from-javascript-to-php
This is a summary of the main solutions with easy-to-reproduce code:
Method 1 (application/json or text/plain + JSON.stringify)
var data = {foo: 'blah "!"', bar: 123}; var xhr = new XMLHttpRequest(); xhr.open("POST", "test.php"); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); } } xhr.setRequestHeader("Content-type", "application/json") // or "text/plain" xhr.send(JSON.stringify(data));
PHP side, you can get the data with:
print_r(json_decode(file_get_contents('php://input'), true));
Method 2 (x-www-form-urlencoded + JSON.stringify)
var data = {foo: 'blah "!"', bar: 123}; var xhr = new XMLHttpRequest(); xhr.open("POST", "test.php"); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); } } xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.send("json=" + encodeURIComponent(JSON.stringify(data)));
Note: encodeURIComponent(...) is needed for example if the JSON contains & character.
PHP side, you can get the data with:
print_r(json_decode($_POST['json'], true));
Method 3 (x-www-form-urlencoded + URLSearchParams)
var data = {foo: 'blah "!"', bar: 123}; var xhr = new XMLHttpRequest(); xhr.open("POST", "test.php"); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); } } xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.send(new URLSearchParams(data).toString());
PHP side, you can get the data with:
print_r($_POST);
Examples
json_decode('{"foo":"bar"}', true); // returns array("foo" => "bar") json_decode('{"foo":"bar"}'); // returns an object, not an array.
Store JSON data in a PHP variable, and then decode it into a PHP associative array:
$jsonobj = '{"Peter":35,"Ben":37,"Joe":43}'; var_dump(json_decode($jsonobj, true));
How to access the values from the PHP object:
$jsonobj = '{"Peter":35,"Ben":37,"Joe":43}'; $obj = json_decode($jsonobj); echo $obj->Peter; echo $obj->Ben; echo $obj->Joe;
How to access the values from the PHP associative array:
$jsonobj = '{"Peter":35,"Ben":37,"Joe":43}'; $arr = json_decode($jsonobj, true); echo $arr["Peter"]; echo $arr["Ben"]; echo $arr["Joe"];