如何在链接或表单中指定 DELETE 方法?
Posted
技术标签:
【中文标题】如何在链接或表单中指定 DELETE 方法?【英文标题】:How to specify DELETE method in a link or form? 【发布时间】:2011-10-19 02:00:19 【问题描述】:Rfc2616 列出了除 GET 和 POST 之外的许多方法,例如 DELETE、PUT 等。不过,html 表单中的方法字段似乎只允许指定 GET 或 POST。
是否可以在使用非 GET 或 POST 请求方法的 html 页面中创建链接或表单?
【问题讨论】:
见***.com/questions/165779/… 在遵循建议的链接之后,我相信最终的答案是:在没有脚本的情况下,无法从 html 页面使用除 GET 和 POST 之外的任何东西。虽然 html5 允许 PUT 和 DELETE 在表单中有一段时间,但它们是 removed。 【参考方案1】:您当然不能创建使用 GET
以外的任何内容的链接。自从 HTML 出现以来,链接就被认为是幂等的并且没有副作用。
对于表单和XMLHTTPRequests
,Caps 的链接是查看的地方:Are the PUT, DELETE, HEAD, etc methods available in most web browsers?。
【讨论】:
我与数据方法属性的链接(来自rails,是一个错误..)的唯一问题是发布!至少对于 FF、Chrome 和 IE ... @halfbit:这是由于some javascript that Rails includes。我谦虚地建议,让链接执行 HTTP GET 以外的任何操作是一个糟糕的主意,尤其是使用 JavaScript。 哦,是的,我已经发现了(真丢脸)。我忘了删除我的评论,因为是假的。再次抱歉 然后世界上大多数人再次点击 GET 链接以验证电子邮件中的用户帐户。 @Jonny:我不清楚这与我的回答有什么关系。【参考方案2】:只需添加一个数据方法属性,<a data-method='put' href='whatever'>link</a>
【讨论】:
您能否链接到任何正确的文档? 投了反对票,因为这个答案非常模糊,并且根据给出的信息,它是不正确的。我不知道它是如何获得最高投票数的。 也许它含糊不清,但它确实是正确的,应该得到支持。对于上面的问题,可以这样使用:<a rel="nofollow" data-method="delete" href="some_link">DeleteMe</a>
不,这是 Rails/jQuery 主义。这不是正确的协议。锚链接只能获取。这是另一个人们不理解它不是普通 HTML 的魔术示例。【参考方案3】:
无法使用删除方法创建链接或表单。
许多网络框架创建了一个名为“_method”的隐藏输入来处理 PUT 和 DELETE。
我创建了一个自动将链接转换为表单的插件:RestfulizerJs
你可以看这里:https://github.com/Ifnot/RestfulizerJs
【讨论】:
【参考方案4】:试图为在前端使用 Angular 的 Rails 应用程序解决这个问题;这些似乎适用于那种环境:
<a data-confirm="Are you sure?" data-method="delete" href="/link-to-resource" rel="nofollow">Delete</a>
编辑:提醒大家注意,我认为您仍然需要 jQuery 才能使其正常工作。我删除了 jQuery,它停止了工作;我把它放回去,它开始工作了。
【讨论】:
这种行为来自 jquery_ujs,它是 jquery-rails 的一部分。不显眼的 Java 脚本。这也是 data:confirm: 'do you?' 的行为。 如何在 rails react 中实现同样的效果 @OshanWisumperuma 尝试使用dataMethod
和 dataConfirm
之类的东西作为道具。没有使用过 React on Rails,但如果我没记错的话,React 对某些 HTML 属性使用 camelCased 属性:reactjs.org/docs/dom-elements.html 你可能需要 jquery_ujs 才能工作;但是,使用 fetch 并传递 HTTP DELETE 请求也很简单。【参考方案5】:
默认情况下,不是没有办法做到这一点。链接always perform GETs, forms can use GETs or POSTs.
也就是说,使用一点 JavaScript,这是可能的。例如,Rails 附带了帮助程序,它将为链接添加 data-method
属性。 Rails-UJS 是一个 jQuery 库,它将透明地拦截对这些链接的点击,并使用用于覆盖普通 HTTP 方法的_method
参数触发表单提交。最后,Rack 将拦截带有_method
参数的请求,并用_method
中的值覆盖请求方法。
其他框架无疑也遵循类似的模式。
如果您想了解更多详细信息,我已经解释了 Rails, Rails-UJS, and Rack 如何协同工作以提供此信息。
很高兴知道您的库是如何工作的。
【讨论】:
您的链接转到本地主机网站。你能链接到在线文章吗? monkeyandcrow.com/blog/reading_rails_http_delete_with_a_link【参考方案6】:@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/
【讨论】:
以上是关于如何在链接或表单中指定 DELETE 方法?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Laravel中的find()方法中指定两个或更多条件?