如何在链接或表单中指定DELETE方法?

问题描述 投票:0回答:8

Rfc2616 列出了除 GET 和 POST 之外的许多方法,例如 DELETE、PUT 等。不过,html 表单中的 Method 字段似乎只允许指定 GET 或 POST。

是否可以在 html 页面中创建使用非 GET 或 POST 请求方法的链接或表单?

html hyperlink http-verbs http-delete rfc2616
8个回答
22
投票

试图为前端使用 Angular 的 Rails 应用程序解决这个问题;这些似乎适用于该环境:

<a data-confirm="Are you sure?" data-method="delete" href="/link-to-resource" rel="nofollow">Delete</a>

编辑:只是为了提醒大家,我认为您仍然需要 jQuery 才能实现此功能。我删除了 jQuery,它就停止工作了;我把它放回去,它开始工作了。


18
投票

您当然不能创建使用

GET
以外的任何内容的链接。自从 HTML 出现以来,链接就被认为是幂等的并且没有副作用。

对于表单和

XMLHTTPRequests
,可以查看 Caps 的链接:大多数 Web 浏览器都提供 PUT、DELETE、HEAD 等方法吗?


16
投票

默认情况下,并不是没有办法做到这一点。链接始终执行 GET,表单可以使用 GET 或 POST

也就是说,只需一点 JavaScript,这是可能的。例如,Rails 附带了帮助程序,它将向链接添加

data-method
属性。 Rails-UJS 是一个 jQuery 库,它将透明地拦截这些链接上的点击,并使用用于覆盖正常 HTTP 方法的
_method
参数触发表单提交。最后,Rack 将拦截带有
_method
参数的请求,并用
_method
中的值覆盖请求方法。

其他框架无疑也遵循类似的模式。

如果您想要更多详细信息,我已经写了一篇解释,说明 Rails、Rails-UJS 和 Rack 如何协同工作来提供此功能。

了解您的图书馆如何运作是件好事。


4
投票

无法使用删除方法创建链接或表单。

许多 Web 框架创建一个名为“_method”的隐藏输入来处理 PUT 和 DELETE。

我创建了一个用于自动将链接转换为表单的插件:RestfulizerJs

您可以在这里查看:https://github.com/Ifnot/RestfulizerJs


1
投票

@Ifnot 插件很棒,但我创建了一个基于

$.ajax
函数而不是附加
hidden
表单的插件!这是一个
DELETE
请求的简单示例

HTML

<button class="delete" data-target="http://example.com/post/post-id/" data-method="DELETE" data-disabled="true">Delete Article</button>

JavaScript

$(".delete").restintag(optionsObj, function(data) {
    console.log(data);
},
function(error) {
    console.log(error);
});

https://github.com/KhaledElAnsari/RESTInTag/



0
投票

这是一种直接的 JavaScript 方法。

<body>
<p><a href="javascript: deleteApp('app1')">Delete app1</a></p>
<script>
function deleteApp(branch) {
  fetch('https://example.com/api/v1/resource/'+branch, {
    method: 'DELETE',
    headers: {
      'Authorization': 'Bearer <your_access_token>'
    }
  });
}
</script>
</body>

-9
投票

只需添加一个data-method属性即可,

<a data-method='put' href='whatever'>link</a>

© www.soinside.com 2019 - 2024. All rights reserved.