简体   繁体   中英

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' 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.

So there are a couple of issues here:

  1. PUT requests handle data parsing differently to POST, which is how you've formatted your request. So Delighted's response for more details.

  2. You return a json string but don't convert it into a js object. You need something like $.parseJSON(...) for the object to return properly. So something like:

     success: function(responseData) { var r = $.parseJSON(responseData); console.log(r.response); } 

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM