¿Puedo usar un método PUT en un formulario HTML para enviar datos del formulario a un servidor?
175
Los formularios XHTML 1.x solo admiten GET y POST. GET y POST son los únicos valores permitidos para el atributo "método".
De acuerdo con el estándar HTML , puede que no . Los únicos valores válidos para el atributo del método son
get
ypost
, correspondientes a los métodos HTTP GET y POST.<form method="put">
es HTML no válido y será tratado como<form>
, es decir, enviará una solicitud GET.En cambio, muchos marcos simplemente usan un parámetro POST para tunelizar el método HTTP:
Por supuesto, esto requiere desenvolver del lado del servidor.
fuente
Sí, puede, pero tenga en cuenta que no dará como resultado una PUT sino una solicitud GET. Si usa un valor no válido para el
method
atributo de la<form>
etiqueta, el navegador usará el valor predeterminadoget
.Alternativamente, puede ofrecer un formulario, pero en lugar de enviarlo, cree y active un XMLHttpRequest utilizando el método PUT con JavaScript.
fuente
PUT /resource
.HttpRequest.getParameterMap()
que no devolvió los parámetros del formulario._method
solución de campo ocultoLa siguiente técnica simple es utilizada por algunos marcos web:
agregue un
_method
parámetro oculto a cualquier formulario que no sea GET o POST:Esto se puede hacer automáticamente en marcos a través del método auxiliar de creación HTML.
arregle el método de formulario real a POST (
<form method="post"
)procesa
_method
en el servidor y hace exactamente como si ese método hubiera sido enviado en lugar de la POST realPuedes lograr esto en:
form_tag
@method("PATCH")
Justificación / historia de por qué no es posible en HTML puro: /software/114156/why-there-are-no-put-and-delete-methods-in-html-forms
fuente
@method("PATCH")
POST
y no lo que realmente necesitaba.Desafortunadamente, los navegadores modernos no ofrecen soporte nativo para solicitudes HTTP PUT. Para evitar esta limitación, asegúrese de que el atributo de método de su formulario HTML sea "post", luego agregue un parámetro de anulación de método a su formulario HTML como este:
Para probar sus solicitudes, puede usar "Postman", una extensión de Google Chrome
fuente
Para configurar los métodos PUT y DELETE, realizo lo siguiente:
Entonces JS actúa para realizar los métodos deseados:
Con estas funciones definidas, agrego un detector de eventos a los botones que realizan la solicitud del método de formulario:
Y para el botón Eliminar en el formulario PUT:
_ - - - - - - - - - - -
¡Este artículo https://blog.garstasio.com/you-dont-need-jquery/ajax/ me ayuda mucho!
Más allá de esto, puede configurar la función postMethod y getMethod para manejar los métodos de envío POST y GET como desee en lugar del comportamiento predeterminado del navegador. Puede hacer lo que quiera usar
location.reload()
, como mostrar un mensaje de cambios exitosos o eliminación exitosa.= - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = -
JSFiddle: https://jsfiddle.net/enriquerene/d6jvw52t/53/
fuente