Puis-je utiliser une méthode PUT dans un formulaire HTML pour envoyer des données du formulaire à un serveur?
175
Les formulaires XHTML 1.x ne prennent en charge que GET et POST. GET et POST sont les seules valeurs autorisées pour l'attribut "méthode".
Selon la norme HTML , vous ne pouvez pas . Les seules valeurs valides pour l'attribut de méthode sont
get
etpost
, correspondant aux méthodes HTTP GET et POST.<form method="put">
est du HTML invalide et sera traité comme<form>
, c'est-à-dire envoyer une requête GET.Au lieu de cela, de nombreux frameworks utilisent simplement un paramètre POST pour tunneliser la méthode HTTP:
Bien sûr, cela nécessite un déballage côté serveur.
la source
Oui, vous pouvez, mais gardez à l'esprit que cela n'entraînera pas une requête PUT mais une requête GET. Si vous utilisez une valeur non valide pour l'
method
attribut de la<form>
balise, le navigateur utilisera la valeur par défautget
.Vous pouvez également proposer un formulaire, mais au lieu de le soumettre, créez et déclenchez une XMLHttpRequest en utilisant la méthode PUT avec JavaScript.
la source
PUT /resource
.HttpRequest.getParameterMap()
ne renvoyait pas les paramètres du formulaire._method
solution de contournement de champ masquéLa technique simple suivante est utilisée par quelques frameworks Web:
ajoutez un
_method
paramètre masqué à tout formulaire qui n'est pas GET ou POST:Cela peut être fait automatiquement dans les frameworks via la méthode d'aide à la création HTML.
corrige la méthode de formulaire réelle à POST (
<form method="post"
)processus
_method
sur le serveur et faites exactement comme si cette méthode avait été envoyée au lieu du POST réelVous pouvez y parvenir en:
form_tag
@method("PATCH")
Raison d'être / historique des raisons pour lesquelles cela n'est pas possible en HTML pur: /software/114156/why-there-are-no-put-and-delete-methods-in-html-forms
la source
@method("PATCH")
POST
et non ce dont vous aviez réellement besoin.Malheureusement, les navigateurs modernes ne fournissent pas de support natif pour les requêtes HTTP PUT. Pour contourner cette limitation, assurez-vous que l'attribut de méthode de votre formulaire HTML est «post», puis ajoutez un paramètre de remplacement de méthode à votre formulaire HTML comme ceci:
Pour tester vos demandes, vous pouvez utiliser "Postman" une extension Google Chrome
la source
Pour définir les méthodes PUT et DELETE, je fais comme suit:
Ensuite, JS agit pour exécuter les méthodes souhaitées:
Avec ces fonctions définies, j'ajoute un écouteur d'événement aux boutons qui font la demande de méthode de formulaire:
Et pour le bouton de suppression du formulaire PUT:
_ - - - - - - - - - - -
Cet article https://blog.garstasio.com/you-dont-need-jquery/ajax/ m'aide beaucoup!
Au-delà de cela, vous pouvez définir la fonction postMethod et getMethod pour gérer les méthodes d'envoi POST et GET comme vous le souhaitez à la place du comportement par défaut du navigateur. Vous pouvez faire ce que vous voulez à la place
location.reload()
, comme afficher le message des modifications réussies ou la suppression réussie.= - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = -
JSFiddle: https://jsfiddle.net/enriquerene/d6jvw52t/53/
la source