Rfc2616列出了除GET和POST之外的许多方法,例如DELETE,PUT等。但是html格式的方法字段似乎只允许指定GET或POST。
是否可以在html页面中创建使用非GET或POST请求方法的链接或表单?
答案 0 :(得分:16)
您当然无法创建使用GET
以外的任何内容的链接。自HTML开始以来,链接一直是幂等的,没有副作用。
对于表单和XMLHTTPRequests
,可以查看“Caps”链接:Are the PUT, DELETE, HEAD, etc methods available in most web browsers?。
答案 1 :(得分:15)
试图为前端使用Angular的rails应用程序解决这个问题;这些似乎适用于那种环境:
<a data-confirm="Are you sure?" data-method="delete" href="/link-to-resource" rel="nofollow">Delete</a>
编辑:只是为了让每个人都站起来,我认为你仍然需要使用jQuery来实现这个目标。我删除了jQuery,它停止了工作;我把它放回去了,它开始工作了。
答案 2 :(得分:11)
默认情况下,没有办法做到这一点。链接always perform GETs, forms can use GETs or POSTs。
也就是说,用一点JavaScript,它是可能的。例如,Rails附带了帮助程序,它们会为链接添加data-method
属性。 Rails-UJS是一个jQuery库,它将透明地拦截这些链接上的点击,并触发一个带有_method
参数的表单提交,用于覆盖普通的HTTP方法。最后,Rack将使用_method
参数拦截请求,并使用_method
中的值覆盖请求方法。
其他框架无疑也遵循类似的模式。
如果你想了解更多细节,我已经写了一份关于Rails, Rails-UJS, and Rack如何共同提供这些内容的解释。
了解你的图书馆是如何运作的。
答案 3 :(得分:4)
无法使用删除方法创建链接或表单。
许多Web框架创建了一个名为“_method”的隐藏输入来处理PUT和DELETE。
我创建了一个插件,用于自动将链接转换为表单:RestfulizerJs
答案 4 :(得分:2)
@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);
});
答案 5 :(得分:-5)
只需添加数据方法属性<a data-method='put' href='whatever'>link</a>