0

I'm trying to make a request via JS to my own PHP REST API. It seems like the data which is send by the JS doesn't make it to the PHP API.

JS Code:

var data = {
    'name': 'kevin'
};

var request = new XMLHttpRequest();


request.open("POST", "http://192.168.64.2/testJsRequest.php", true);
request.setRequestHeader('Content-type', 'application/json');

request.onreadystatechange = function() {
    if (request.readyState == 4 && request.status == 200) {
        console.log("RESPONSE" + request.responseText);
    }
}

request.send(data);

PHP Code

           <?php
        $responseStatus = '200 OK';
        $responseText = $_POST['name'];
        
        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Allow-Headers: *');
        header($_SERVER['SERVER_PROTOCOL'].' '.$responseStatus);
        header('Content-type: application/json; charset=utf-8');
        
        echo json_encode($responseText);
  • 3
    You can use your browser's developer tools to see what was send to the API. – KIKO Software Feb 09 '22 at 22:26
  • 1
    You need to convert `data` to JSON with `JSON.stringify()` – Barmar Feb 09 '22 at 22:34
  • You need to handle the [pre-flight `OPTIONS` request](https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request). Supporting CORS is more than just responding with `Access-Control-Allow-*` headers – Phil Feb 09 '22 at 22:34
  • 3
    Note that PHP doesn't parse JSON requests into `$_POST`. – Barmar Feb 09 '22 at 22:35
  • To elaborate on @Barmar's comment, it should be `request.send("name=kevin")` or to use your existing object `request.send(new URLSearchParams(data))`. You should also remove your content-type header – Phil Feb 09 '22 at 22:35
  • you're sending *application/json*, you're expecting *application/x-www-form-urlencoded* – Bravo Feb 09 '22 at 22:36

0 Answers0