web-dev-qa-db-fra.com

Comment spécifier la méthode DELETE dans un lien ou un formulaire?

Rfc2616 répertorie de nombreuses méthodes en plus de GET et POST, comme, disons, DELETE, PUT etc. Le champ de méthode dans les formulaires html, cependant, semble être autorisé à spécifier uniquement GET ou POST.

Est-il possible de créer un lien ou un formulaire dans une page html qui utilise une méthode de requête qui n'est pas GET ou POST?

31

Vous ne pouvez certainement pas créer un lien qui utilise autre chose que GET. Depuis le début du HTML, les liens sont censés être idempotents et sans effets secondaires.

Pour les formulaires et XMLHTTPRequests, le lien Caps est l'endroit où chercher: Les méthodes PUT, DELETE, HEAD, etc. sont-elles disponibles dans la plupart des navigateurs Web? .

17
Paul D. Waite

J'essayais de comprendre cela pour une application Rails qui utilisait Angular sur le frontal; cela semble fonctionner pour cet environnement:

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

Edit: Juste pour donner à tout le monde un aperçu, je pense que vous devez encore avoir jQuery pour que cela fonctionne. J'ai supprimé jQuery et il a cessé de fonctionner; Je l'ai remis et ça a commencé à fonctionner.

15
AlmightyWhy

Par défaut, il n'y a aucun moyen de le faire. Liens toujours effectuer des GET, les formulaires peuvent utiliser des GET ou des POST .

Cela dit, avec un peu de JavaScript, c'est possible. Rails par exemple est livré avec des aides qui ajouteront un data-method attribut aux liens. Rails-UJS est une bibliothèque jQuery qui interceptera de manière transparente les clics sur ces liens et déclenchera une soumission de formulaire avec un _method paramètre utilisé pour remplacer la méthode HTTP normale. Enfin Rack va intercepter les requêtes avec un _method params, et écrase la méthode de demande avec la valeur dans _method.

D'autres cadres suivent sans aucun doute un schéma similaire.

Si vous voulez encore plus de détails, j'ai écrit une explication de la façon dont Rails, Rails-UJS et Rack travaillent tous ensemble pour fournir cela.

Il est bon de savoir comment fonctionnent vos bibliothèques.

13
Adam Sanderson

Il n'est pas possible de créer un lien ou un formulaire avec la méthode de suppression.

De nombreux frameworks Web créent une entrée cachée appelée "_method" pour gérer PUT et DELETE.

J'ai créé un plugin pour convertir automatiquement les liens en formulaires: RestfulizerJs

Vous pouvez jeter un œil ici: https://github.com/Ifnot/RestfulizerJs

3
Ifnot

Le plugin @Ifnot est génial mais j'en ai créé un basé sur $.ajax fonction au lieu d'ajouter hidden formulaires! voici un exemple simple pour une demande 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/

2
Khaled Al-Ansari