[Solved] Send JSON data to PHP using XMLHttpRequest w/o jQuery

PHP does not process JSON requests automatically like it does with form-encoded or multipart requests. If you want to use JSON to send requests to PHP, you’re basically doing it correctly with file_get_contents(). If you want to merge those variables into your global $_POST object you can, though I would not recommend doing this as it might be confusing to other developers.

// it's safe to overwrite the $_POST if the content-type is application/json
// because the $_POST var will be empty
$headers = getallheaders();
if ($headers["Content-Type"] == "application/json")
    $_POST = json_decode(file_get_contents("php://input"), true) ?: [];

Quick note: you should not be sending a charset with your Content-Type for application/json. This should only be sent with text/* Content-Types.

You forgot to name your variables in the send function.
The good way to use it is

x.send('name1='+string+'&name2=value2'); 

Given that, I think you will have to change the content-length header. I don’t think it is usefull to send it.

One another thing you can do is try with GET method.
You can also try to change your content-type header by that one :

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded")

Read more here: Source link