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

Rfc2616 liste de nombreuses méthodes à part GET et POST, comme, par exemple, supprimer, mettre, etc. Le champ de méthode dans les formes html, cependant, semble être autorisé à spécifier seulement 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?

24
demandé sur Brian Tompsett - 汤莱恩 2011-08-03 16:33:52

6 réponses

essayait de comprendre cela pour une application de rails qui utilisait L'angle à l'avant; 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 à chacun un heads-up, je pense que vous avez encore le besoin d'avoir de jQuery pour que cela fonctionne. J'ai retiré jQuery et il a cessé de fonctionner; je l'ai remis en place et il a commencé à fonctionner.

14
répondu AlmightyWhy 2016-03-29 23:40:33

vous ne pouvez certainement pas créer un lien qui utilise autre chose que GET . Depuis HTML a commencé, les liens ont été conçus pour être idempotent et sans effets secondaires.

Pour les formulaires et les XMLHTTPRequests , de Caps lien est l'endroit à regarder: Sont le PUT, DELETE, TÊTE, etc méthodes disponibles dans la plupart des navigateurs web? .

13
répondu Paul D. Waite 2017-05-23 10:31:09

par défaut, il n'y a aucun moyen de faire cela. Des liens toujours effectuer Obtient, les formulaires peuvent utiliser Obtient ou des Postes .

cela dit, avec un peu de JavaScript, c'est possible. Rails par exemple les bateaux avec helpers qui ajouteront un attribut data-method aux liens. Rails-UJS est une bibliothèque jQuery qui interceptera de manière transparente les clics sur ces liens, et déclenchera un formulaire soumettre avec un paramètre _method utilisé pour passer outre la méthode HTTP normale. Enfin Rack interceptera les requêtes avec un params _method , et écrasera la méthode de requête avec la valeur _method .

D'autres cadres suivent sans doute un modèle similaire.

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

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

8
répondu Adam Sanderson 2017-07-14 07:14:14

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

de nombreux framework 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 vers des formulaires: RestfulizerJs

vous pouvez jeter un oeil ici: https://github.com/Ifnot/RestfulizerJs

2
répondu Ifnot 2014-02-19 14:28:55

@Sinon plugin est génial mais j'ai créé un basé sur $.ajax fonction plutôt que d'en ajoutant hidden formes! voici un exemple simple pour une DELETE requête

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
répondu Khaled Al-Ansari 2017-03-05 11:07:44

il suffit d'ajouter un attribut de méthode de données, <a data-method='put' href='whatever'>link</a>

-5
répondu Edward Verenich 2013-12-05 19:03:56