Est-il possible de faire un POST à partir d'un simple <a>
étiquette ? Je sais que les balises d'ancrage ne sont généralement utilisées que pour les GET, et je sais que je peux utiliser le javascript pour le faire (comme dans l'exemple ci-dessous). JavaScript post request like a form submit ) mais cela me semble un peu désordonné. Existe-t-il un moyen de faire cela avec du HTML pur ?
Réponses
Trop de publicités?Pas vraiment, non. Vous pouvez, cependant, faire quelque chose comme ça :
<form action="theUrl" method="POST">
<input type="hidden" name="param1" value="val" />
<input type="hidden" name="param2" value="val2" />
<a href="#" onclick="this.parentNode.submit()">Go to that link!</a>
</form>
Vous devriez trouver un meilleur moyen, cependant. Celui-ci ne se dégrade pas gracieusement.
Il n'y a aucun moyen de POST
un a
en utilisant uniquement le langage HTML.
Comme on peut le voir dans ce fragment de DTD ( HTML 4.01 spec ):
<!ELEMENT A - - (%inline;)* -(A) -- anchor -->
<!ATTLIST A
%attrs; -- %coreattrs, %i18n, %events --
charset %Charset; #IMPLIED -- char encoding of linked resource --
type %ContentType; #IMPLIED -- advisory content type --
name CDATA #IMPLIED -- named link end --
href %URI; #IMPLIED -- URI for linked resource --
hreflang %LanguageCode; #IMPLIED -- language code --
rel %LinkTypes; #IMPLIED -- forward link types --
rev %LinkTypes; #IMPLIED -- reverse link types --
accesskey %Character; #IMPLIED -- accessibility key character --
shape %Shape; rect -- for use with client-side image maps --
coords %Coords; #IMPLIED -- for use with client-side image maps --
tabindex NUMBER #IMPLIED -- position in tabbing order --
onfocus %Script; #IMPLIED -- the element got the focus --
onblur %Script; #IMPLIED -- the element lost the focus --
>
Il n'y a pas d'attribut qui contrôle l'utilisation ou non de la fonction POST
o GET
avec un a
élément.
Vous ont pour script le faire, si vous voulez abuser de la sémantique.
Au cas où ça servirait à quelqu'un :
<a href="http://stackoverflow.com/your-route"
onclick="event.preventDefault();
document.getElementById('magic-form').submit();">
Magic Action
</a>
<form id="magic-form" action="/your-route"
method="POST" style="display: none;">
{{ csrf_field() }} <!-- from your framework -->
<input type="hidden" name="field1" value="value1" />
<!-- other fields -->
</form>