我想知道关于如何在浏览器中执行POST / GET以外的其他操作的最终(?)答案 - HTML表单或Ajax,因为我听到有关浏览器允许的内容的混合报告(特别是关于ajax方面)。
以RESTful风格构建后端时,最好使用PUT,HEAD,OPTIONS等适当的动词...在rails中,使用名为 method (IIRC?)的隐藏表单字段模拟这个,并在后端调度到动词的适当控制器。现在(2009年底)这是必要的吗?有哪些惯例?
答案 0 :(得分:35)
似乎大多数浏览器除了GET和POST之外不支持其他方法,因为它是HTML表单的限制。 以下是关于该主题的另一个问题:
Are the PUT, DELETE, HEAD, etc methods available in most web browsers?
为了模拟PUT,DELETE等方法,您可以使用伪方法向常规GET / POST表单添加隐藏输入,并让您的应用程序对其进行翻译,以便您的控制器看到它就好像是正如你所提到的那样,一个真正的PUT请求。我已经在google sitebricks中看到过这种方法(在java中 - 抱歉我没有任何特定于rails的参考,但这至少可以给你一个想法)this code.我认为这可能是我们的方法坚持不懈,直到HTML规范中的某些内容发生变化(以及带有它的浏览器)
然而,主流浏览器在AJAX中支持GET,POST,PUT和DELETE,因此如果您不依赖于HTML表单,则不需要隐藏输入。
答案 1 :(得分:6)
你必须使用AJAX来做除GET和POST以外的任何事情,我建议你使用jQuery Forms插件来提交表格作为PUT。
答案 2 :(得分:4)
HTTP有4个GET,POST,PUT,UPDATE。但大多数浏览器仅支持GET和POST。通过在请求中发送附加参数来模拟PUT和UPDATE。在rails中它是_method =“PUT”或_method =“UPDATE”。
答案 3 :(得分:3)
我认为此问题的首选解决方案是使用X-HTTP-Method-Override标头。如果你搜索这个术语,你应该找到很多如何使用它的例子。
答案 4 :(得分:1)
我认为你会发现许多防火墙阻止了一些较酷的HTTP动词。因此,虽然它可能对您有用,但如果您正在尝试为公众网站上的公众创建一些东西,那么您可能希望坚持使用基础知识。
答案 5 :(得分:1)