Можно ли использовать метод PUT в форме HTML для отправки данных из формы на сервер?
175
Формы XHTML 1.x поддерживают только GET и POST. GET и POST - единственные допустимые значения для атрибута «method».
Согласно стандарту HTML , вы не можете . Единственными допустимыми значениями для атрибута метода являются
get
иpost
, соответствующие методам GET и POST HTTP.<form method="put">
является недействительным HTML и будет рассматриваться как<form>
, т. е. отправить запрос GET.Вместо этого многие фреймворки просто используют параметр POST для туннелирования метода HTTP:
Конечно, это требует развертывания на стороне сервера.
источник
Да, вы можете, но имейте в виду, что это приведет не к PUT, а к запросу GET. Если вы используете недопустимое значение для
method
атрибута<form>
тега, браузер будет использовать значение по умолчаниюget
.В качестве альтернативы вы можете предложить форму, но вместо ее отправки создайте и запустите XMLHttpRequest, используя метод PUT с JavaScript.
источник
PUT /resource
.HttpRequest.getParameterMap()
не возвращались параметры формы._method
Обход скрытого поляСледующая простая техника используется несколькими веб-фреймворками:
добавьте скрытый
_method
параметр в любую форму, которая не является GET или POST:Это может быть сделано автоматически в рамках через вспомогательный метод создания HTML.
исправить фактический метод формы в POST (
<form method="post"
)процессы
_method
на сервере и делают точно так же, как если бы этот метод был отправлен вместо фактического POSTВы можете достичь этого в:
form_tag
@method("PATCH")
Обоснование / история того, почему это невозможно в чистом HTML: /software/114156/why-there-are-no-put-and-delete-methods-in-html-forms
источник
@method("PATCH")
POST
а не тот, который вам действительно нужен.К сожалению, современные браузеры не предоставляют встроенную поддержку запросов HTTP PUT. Чтобы обойти это ограничение, убедитесь, что атрибут метода HTML-формы «post», а затем добавьте параметр переопределения метода в HTML-форму следующим образом:
Для проверки ваших запросов вы можете использовать «Почтальон» расширение Google Chrome
источник
Для установки методов PUT и DELETE я выполняю следующее:
Затем JS действует для выполнения желаемых методов:
Определив эти функции, я добавляю прослушиватель событий к кнопкам, которые делают запрос метода формы:
А для кнопки удаления в форме PUT:
_ - - - - - - - - - - -
Эта статья https://blog.garstasio.com/you-dont-need-jquery/ajax/ мне очень помогает!
Помимо этого, вы можете установить функцию postMethod и getMethod для обработки методов отправки POST и GET так, как вам нравится, вместо поведения браузера по умолчанию. Вместо этого вы можете делать все, что захотите
location.reload()
, например, показывать сообщение об успешных изменениях или успешном удалении.= - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = -
JSFiddle: https://jsfiddle.net/enriquerene/d6jvw52t/53/
источник