Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you send a request with the "DELETE" HTTP verb?

I'd like to create a link in a view within a Rails application that does this...

DELETE /sessions

How would I do that.

Added complication:

The "session" resource has no model because it represents a user login session. CREATE means the user logs in, DESTROY means logs out.

That's why there's no ID param in the URI.

I'm trying to implement a "log out" link in the UI.

like image 388
Ethan Avatar asked Feb 07 '09 14:02

Ethan


3 Answers

Correct, browsers don't actually support sending delete requests. The accepted convention of many web frameworks is to send a _method parameter set to 'DELETE', and use a POST request.

Here's an example in Rails:

<%= link_to 'log out', session_path, :method => :delete %>

You may want to have a look at Restful Authentication.

like image 175
Jim Benton Avatar answered Sep 27 '22 23:09

Jim Benton


I don't know about Rails specifically, but I frequently build web pages which send DELETE (and PUT) requests, using Javascript. I just use XmlHttpRequest objects to send the request.

For example, if you use jQuery:

have a link that looks like this:

<a class="delete" href="/path/to/my/resource">delete</a>

And run this Javascript:

$(function(){
    $('a.delete').click(function(){
        $.ajax(
            {
                url: this.getAttribute('href'),
                type: 'DELETE',
                async: false,
                complete: function(response, status) {
                    if (status == 'success')
                        alert('success!')
                    else
                        alert('Error: the service responded with: ' + response.status + '\n' + response.responseText)
                }
            }
        )
        return false
    })
})

I wrote this example mostly from memory, but I'm pretty sure it'll work....

like image 27
Avi Flax Avatar answered Sep 27 '22 21:09

Avi Flax


Correct me if I'm wrong, but I believe you can only send POST and GET requests with a browser (in HTML).

like image 43
Mario Avatar answered Sep 27 '22 21:09

Mario