Kann ich eine PUT-Methode in einem HTML-Formular verwenden, um Daten aus dem Formular an einen Server zu senden?
174
XHTML 1.x-Formulare unterstützen nur GET und POST. GET und POST sind die einzigen zulässigen Werte für das Attribut "method".
Nach dem HTML-Standard können Sie nicht . Die einzigen gültigen Werte für das Methodenattribut sind
get
undpost
, entsprechend den HTTP-Methoden GET und POST.<form method="put">
ist ungültiges HTML und wird wie behandelt behandelt<form>
, dh eine GET-Anfrage senden.Stattdessen verwenden viele Frameworks einfach einen POST-Parameter, um die HTTP-Methode zu tunneln:
Dies erfordert natürlich ein serverseitiges Auspacken.
quelle
Ja, das können Sie, aber denken Sie daran, dass dies nicht zu einem PUT, sondern zu einer GET-Anforderung führt. Wenn Sie einen ungültigen Wert für das
method
Attribut des<form>
Tags verwenden, verwendet der Browser den Standardwertget
.Sie können alternativ ein Formular anbieten, aber anstatt es zu senden, erstellen und feuern Sie eine XMLHttpRequest mithilfe der PUT-Methode mit JavaScript.
quelle
PUT /resource
.HttpRequest.getParameterMap()
keine Formularparameter zurückgegeben wurden._method
Problemumgehung für versteckte FelderDie folgende einfache Technik wird von einigen Web-Frameworks verwendet:
Fügen Sie
_method
jedem Formular, das nicht GET oder POST ist , einen versteckten Parameter hinzu:Dies kann in Frameworks automatisch über die Hilfsmethode zur HTML-Erstellung erfolgen.
Korrigieren Sie die eigentliche Formularmethode auf POST (
<form method="post"
)Prozesse
_method
auf dem Server und tun genau so, als ob diese Methode anstelle des eigentlichen POST gesendet worden wäreSie können dies erreichen in:
form_tag
@method("PATCH")
Begründung / Verlauf, warum dies in reinem HTML nicht möglich ist: /software/114156/why-there-are-no-put-and-delete-methods-in-html-forms
quelle
@method("PATCH")
POST
nicht die tatsächlich benötigte ist.Leider bieten moderne Browser keine native Unterstützung für HTTP-PUT-Anforderungen. Um diese Einschränkung zu umgehen, stellen Sie sicher, dass das Methodenattribut Ihres HTML-Formulars "post" lautet, und fügen Sie Ihrem HTML-Formular einen Parameter zum Überschreiben von Methoden wie folgt hinzu:
Um Ihre Anfragen zu testen, können Sie "Postman", eine Google Chrome-Erweiterung, verwenden
quelle
Um die Methoden PUT und DELETE einzustellen, gehe ich wie folgt vor:
Dann führt JS die gewünschten Methoden aus:
Wenn diese Funktionen definiert sind, füge ich den Schaltflächen, die die Formularmethodenanforderung stellen, einen Ereignis-Listener hinzu:
Und für die Schaltfläche zum Entfernen im PUT-Formular:
_ - - - - - - - - - - - -
Dieser Artikel https://blog.garstasio.com/you-dont-need-jquery/ajax/ hilft mir sehr!
Darüber hinaus können Sie die postMethod-Funktion und getMethod so einstellen, dass POST- und GET-Übermittlungsmethoden nach Ihren Wünschen behandelt werden, anstatt das Standardverhalten des Browsers. Sie können stattdessen tun, was Sie möchten
location.reload()
, z. B. die Meldung erfolgreicher Änderungen anzeigen oder erfolgreich löschen.= - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = -
JSFiddle: https://jsfiddle.net/enriquerene/d6jvw52t/53/
quelle