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

久未见 提交于 2019-11-29 01:15:03

问题


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.


回答1:


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.




回答2:


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




回答3:


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




回答4:


Rails' built in method for links will generate something like this:

<a href="/sessions?method=delete" rel="nofollow">Logout</a>

If you don't want to use the Rails' built in method (i.e. don't want the rel="nofollow", which prevents search engine crawlers from following the link), you can also manually write the link and add the data-method attribute, like so:

<a href="/sessions" data-method="delete">Logout</a>

Browsers can only send GET/POST requests, so this will send a normal GET request to your Rails server. Rails will interpret and route this as a DESTROY/DELETE request, and calls the appropriate action.



来源:https://stackoverflow.com/questions/523843/how-do-you-send-a-request-with-the-delete-http-verb

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!