代码之家  ›  专栏  ›  技术社区  ›  Ethan

如何使用“删除”HTTP动词发送请求?

  •  5
  • Ethan  · 技术社区  · 16 年前

    我想在一个Rails应用程序的视图中创建一个链接,这样做…

    DELETE /sessions
    

    我该怎么做呢?

    增加的并发症:

    “会话”资源没有模型,因为它表示用户登录会话。 CREATE 表示用户登录, DESTROY 意味着退出。

    这就是URI中没有ID参数的原因。

    我正在尝试在用户界面中实现一个“注销”链接。

    4 回复  |  直到 9 年前
        1
  •  18
  •   Jim Benton    16 年前

    正确,浏览器实际上不支持发送删除请求。许多Web框架接受的惯例是发送一个设置为“delete”的方法参数,并使用post请求。

    以下是Rails中的一个示例:

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

    你可能想看看 Restful Authentication .

        2
  •  4
  •   Avi Flax    16 年前

    我不知道Rails的具体情况,但我经常使用JavaScript构建发送删除(和放置)请求的网页。我只是使用xmlhttpRequest对象发送请求。

    例如,如果使用jquery:

    具有如下链接:

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

    运行这个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
        })
    })
    

    我主要是根据记忆写的这个例子,但我很确定它会起作用……

        3
  •  1
  •   Mario    16 年前

    如果我错了,请纠正我,但我相信您只能通过浏览器(HTML)发送帖子和获取请求。

        4
  •  1
  •   ajay14    9 年前

    Rails的链接内置方法将生成如下内容:

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

    如果您不想使用Rails的内置方法(即不希望 rel="nofollow" ,这会阻止搜索引擎爬虫跟踪链接)。 您还可以手动编写链接并添加 data-method 属性,如:

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

    浏览器只能发送get/post请求,因此这将向Rails服务器发送一个普通的get请求。Rails将解释并将其路由为销毁/删除请求,并调用适当的操作。