Как указать метод DELETE в ссылке или форме?

Rfc2616 перечисляет множество методов, помимо GET и POST, например, DELETE, PUT и т. д. Однако поле метода в html-формах, похоже, может указывать только GET или POST.

Можно ли создать ссылку или форму на странице html, которая использует метод запроса, отличный от GET или POST?


person Maurício C Antunes    schedule 03.08.2011    source источник
comment
См. stackoverflow.com/questions/165779/   -  person Caps    schedule 03.08.2011
comment
После следования предложенным ссылкам я считаю, что окончательный ответ будет таким: использование чего-либо, кроме GET и POST, невозможно с html-страницы без сценариев. Хотя html5 какое-то время разрешал PUT и DELETE в формах, они были удалены.   -  person Maurício C Antunes    schedule 19.08.2011


Ответы (6)


Пытался понять это для приложения rails, которое использовало Angular во внешнем интерфейсе; они, кажется, работают для этой среды:

<a data-confirm="Are you sure?" data-method="delete" href="/link-to-resource" rel="nofollow">Delete</a>

Изменить: просто чтобы предупредить всех, я думаю, вам все еще нужно иметь jQuery, чтобы это работало. Я удалил jQuery, и он перестал работать; Я поставил его обратно, и он начал работать.

person AlmightyWhy    schedule 09.02.2016
comment
Такое поведение исходит от jquery_ujs, который является частью jquery-rails. Ненавязчивый Java-скрипт. Это то, что также влияет на поведение данных:{подтвердить: 'а вы?'}. - person Jesse Farmer; 30.06.2017
comment
как я могу добиться того же в реакции на рельсы - person Oshan Wisumperuma; 06.09.2019
comment
@OshanWisumperuma попробуйте использовать что-то вроде dataMethod и dataConfirm для реквизита. Не использовал React on Rails, но, если я правильно помню, React использует пропсы в верблюжьем стиле для определенных свойств HTML: reactjs.org/docs/dom-elements.html Вам, вероятно, понадобится jquery_ujs, чтобы это работало; однако также было бы тривиально использовать выборку и пропустить запрос HTTP DELETE. - person AlmightyWhy; 07.09.2019

Вы, конечно, не можете создать ссылку, которая использует что-либо, кроме GET. С момента появления HTML ссылки должны были быть идемпотентными и свободными от побочных эффектов.

Для форм и XMLHTTPRequests ссылка Caps - это место для поиска: -web-browsers">Доступны ли методы PUT, DELETE, HEAD и т. д. в большинстве веб-браузеров?.

person Paul D. Waite    schedule 03.08.2011
comment
единственная проблема в том, что мои ссылки с атрибутом метода данных (исходя из рельсов, была ошибка ..) публикуются! по крайней мере с FF, Chrome и IE... - person halfbit; 22.08.2014
comment
@halfbit: это из-за некоторого JavaScript, который Rails включает. Я бы скромно предположил, что заставлять ссылки делать что-то кроме HTTP GET — ужасная идея, особенно с JavaScript. - person Paul D. Waite; 23.08.2014
comment
о, да, я уже узнал об этом (позор мне). Я забыл удалить свой комментарий, потому что это ложь. извини еще раз - person halfbit; 23.08.2014
comment
Затем снова большая часть мира нажимает на ссылки GET для проверки учетных записей пользователей в электронных письмах. - person Jonny; 30.05.2018
comment
@Jonny: я не понимаю, какое отношение это имеет к моему ответу. - person Paul D. Waite; 30.05.2018

По умолчанию не существует способа сделать это. Ссылки всегда выполняют GET, формы могут использовать GET или POST .

Тем не менее, с небольшим количеством JavaScript это возможно. Например, Rails поставляется с помощниками, которые добавляют к ссылкам атрибут data-method. Rails-UJS — это библиотека jQuery, которая прозрачно перехватывает клики по этим ссылкам и инициирует отправку формы с параметром _method, используемым для переопределения обычного метода HTTP. Наконец, Rack будет перехватывать запросы с параметрами _method и перезаписывать метод запроса со значением в _method.

Другие фреймворки, без сомнения, следуют аналогичному шаблону.

Если вам нужны еще подробности, я написал объяснение того, как Rails, Rails-UJS и Rack все работают вместе, чтобы обеспечить это.

Хорошо знать, как работают ваши библиотеки.

person Adam Sanderson    schedule 17.05.2016
comment
Ваша ссылка ведет на локальный сайт. Не могли бы вы дать ссылку на статью в Интернете? - person E Rullmann; 10.07.2017

Невозможно создать ссылку или форму методом удаления.

Многие веб-фреймворки создают скрытый ввод под названием «_method» для обработки PUT и DELETE.

Я создал плагин для автоматического преобразования ссылок в формы: RestfulizerJs

Вы можете посмотреть здесь: https://github.com/Ifnot/RestfulizerJs

person Ifnot    schedule 19.02.2014

Плагин @Ifnot отличный, но я создал его на основе функции $.ajax вместо добавления форм hidden! вот простой пример запроса DELETE

HTML

<button class="delete" data-target="http://example.com/post/post-id/" data-method="DELETE" data-disabled="true">Delete Article</button>

JavaScript

$(".delete").restintag(optionsObj, function(data) {
    console.log(data);
},
function(error) {
    console.log(error);
});

https://github.com/KhaledElAnsari/RESTInTag/

person Khaled Al-Ansari    schedule 05.03.2017

просто добавьте атрибут метода данных, <a data-method='put' href='whatever'>link</a>

person Edward Verenich    schedule 05.12.2013
comment
Не могли бы вы дать ссылку на какую-либо документацию, подтверждающую, что это правильно? - person Jarl; 18.04.2014
comment
Проголосовали против, потому что этот ответ очень расплывчатый и, исходя из предоставленной информации, он неверен. Я не уверен, как он получил наибольшее количество голосов. - person Simon; 17.08.2014
comment
Может быть, это расплывчато, но на самом деле это правильно, и за него должны проголосовать. Для вопроса выше его можно использовать так: <a rel="nofollow" data-method="delete" href="some_link">DeleteMe</a> - person Aleks; 09.04.2015
comment
Нет, это Rails/jQuery-изм. Это не правильный протокол. анкорные ссылки получаются только. Это еще один пример волшебства, когда люди не понимают, что это НЕ ванильный HTML. - person Michael Papile; 29.06.2015