Search code examples
javascriptphpjqueryajaxput

jQuery AJAX PUT request data submission not working


I have a PHP file which contains the following:

if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
    echo '{ "response": "' . $_REQUEST['id'] . '" }';
}

Now I want to make an AJAX call to this file via jQuery:

var send = {
    id: 10
};

$.ajax({
    data: send,
    method: 'PUT',
    url: "myphpfile.php",
    success: function(responseData) {
        console.log(responseData.response);
    }
});

This should return 10 as a response, however the output is empty. In the PHP file I also tried writing the id to a text file, which turned out to be empty as well. This means that my PHP code isn't the problem here, it's JavaScript.

When I change the AJAX url to myphpfile.php?id=10 however, the response is correct and 10 is logged to the console.

I have tried a lot of things to fix this, nothing worked. This includes setting contentType: 'application/json; charset=utf-8', dataType: 'json' and data: JSON.stringify(send). I can't find any more forum questions or articles on this and the ones I found didn't work.

Any help is appreciated.


Solution

  • You cant access the data from a PUT request via $_REQUEST. You'd need something like:

    if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
    
        parse_str(file_get_contents("php://input"),$sent_vars);
        echo json_encode(['response'=>$sent_vars['id']]); // use an array and json_encode to avoid messy string concatenation 
    }
    

    See also Accessing Incoming PUT Data from PHP