Czy mogę użyć metody PUT w formularzu HTML, aby wysłać dane z formularza na serwer?
175
Formularze XHTML 1.x obsługują tylko GET i POST. GET i POST to jedyne dozwolone wartości atrybutu „metoda”.
Według standardu HTML , można nie . Jedyne poprawne wartości atrybutu metody to
get
ipost
, odpowiadające metodom GET i POST HTTP.<form method="put">
jest nieprawidłowym kodem HTML i będzie traktowane jak<form>
, tj. wyśle żądanie GET.Zamiast tego wiele frameworków po prostu używa parametru POST do tunelowania metody HTTP:
Oczywiście wymaga to rozpakowania po stronie serwera.
źródło
Tak, możesz, ale pamiętaj, że nie spowoduje to PUT, ale żądanie GET. Jeśli użyjesz nieprawidłowej wartości
method
atrybutu<form>
tagu, przeglądarka użyje wartości domyślnejget
.Alternatywnie możesz zaoferować formularz, ale zamiast go przesyłać, utwórz i uruchom XMLHttpRequest przy użyciu metody PUT z JavaScript.
źródło
PUT /resource
.HttpRequest.getParameterMap()
że nie zwracano parametrów formularza._method
obejście ukrytego polaNastępująca prosta technika jest używana przez kilka frameworków internetowych:
dodaj ukryty
_method
parametr do dowolnego formularza, który nie jest GET ani POST:Można to zrobić automatycznie w frameworkach za pomocą metody pomocnika tworzenia HTML.
napraw rzeczywistą metodę formularza na POST (
<form method="post"
)procesy
_method
na serwerze i robią dokładnie tak, jakby ta metoda została wysłana zamiast faktycznego POSTMożesz to osiągnąć w:
form_tag
@method("PATCH")
Uzasadnienie / historia, dlaczego nie jest to możliwe w czystym HTML: /software/114156/why-there-are-no-put-and-delete-methods-in-html-forms
źródło
@method("PATCH")
POST
tym, czego faktycznie potrzebujesz.Niestety, nowoczesne przeglądarki nie zapewniają natywnej obsługi żądań HTTP PUT. Aby obejść to ograniczenie, upewnij się, że atrybut metody formularza HTML to „post”, a następnie dodaj parametr przesłaniający metodę do formularza HTML w następujący sposób:
Aby przetestować swoje żądania, możesz użyć rozszerzenia Google Chrome „Postman”
źródło
Aby ustawić metody PUT i DELETE, wykonuję następujące czynności:
Następnie JS działa, aby wykonać żądane metody:
Po zdefiniowaniu tych funkcji dodaję detektor zdarzeń do przycisków, które powodują żądanie metody formularza:
A dla przycisku usuwania w formularzu PUT:
_ - - - - - - - - - - -
Ten artykuł https://blog.garstasio.com/you-dont-need-jquery/ajax/ bardzo mi pomaga!
Poza tym możesz ustawić funkcję postMethod i getMethod do obsługi metod przesyłania POST i GET w dowolny sposób, zamiast domyślnego zachowania przeglądarki. Zamiast tego możesz zrobić, co chcesz
location.reload()
, na przykład pokazać komunikat o udanych zmianach lub pomyślnym usunięciu.= - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = -
JSFiddle: https://jsfiddle.net/enriquerene/d6jvw52t/53/
źródło