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?
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.
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? .
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.
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
@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);
});
il suffit d'ajouter un attribut de méthode de données, <a data-method='put' href='whatever'>link</a>