我可以在HTML表单中使用PUT方法将数据从表单发送到服务器吗?


当前回答

我写了一个名为“html-form-enhancer”的npm包。通过将它放入HTML源代码中,它可以使用GET和POST以外的方法来提交表单,还可以添加application/json序列化。

<script type=module" src="html-form-enhancer.js"></script>

<form method="PUT">
...
</form>

其他回答

根据HTML标准,你不能。方法属性的唯一有效值是get和post,对应于get和post HTTP方法。<form method="put">是无效的HTML,将被视为<form>,即发送一个GET请求。

相反,许多框架只是简单地使用POST参数来隧道HTTP方法:

<form method="post" ...>
  <input type="hidden" name="_method" value="put" />
...

当然,这需要服务器端展开。

我写了一个名为“html-form-enhancer”的npm包。通过将它放入HTML源代码中,它可以使用GET和POST以外的方法来提交表单,还可以添加application/json序列化。

<script type=module" src="html-form-enhancer.js"></script>

<form method="PUT">
...
</form>

简单地说——不。

我尝试在HTML表单中触发一个put请求,但它将POST请求发送到服务器。要添加PUT请求-

我们可以通过监听脚本中的提交操作,然后将put请求发送到特定端点来实现这一点。

http-server环境的截图。测验

对于使用laravel的人

<form method="post" ...>
@csrf
@method('put')
...
</form>

_method隐藏字段的解决方法

以下是一些web框架使用的简单技术:

添加一个隐藏的_method参数到任何不是GET或POST的表单: <input type="hidden" name="_method" value="PUT"> 这可以通过HTML创建助手方法在框架中自动完成。 将实际的表单方法固定为POST (<form method=" POST ") 进程_method在服务器上,并做的就像该方法已经发送而不是实际的POST

你可以通过以下方法实现:

Rails: form_tag 中@ method (Laravel:“补丁”)

为什么它在纯HTML中是不可能的原理/历史:https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms