Est-il possible de faire un POST à partir d'une balise <a>
? Je sais que les balises d'ancrage sont généralement réservées aux GET, et je sais que je peux utiliser javascript pour faire cela (comme dans demande de publication JavaScript comme un formulaire de soumission ), mais cela me semble un peu désordonné. Y a-t-il un moyen de faire cela avec du HTML droit?
Il n’existe aucun moyen de POST
un élément a
en utilisant uniquement HTML.
Comme on peut le voir dans ce fragment de DTD ( Spécification HTML 4.01 ):
<!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 s'il faut utiliser POST
ou GET
avec un élément a
.
Vous devez pour le script, si vous voulez abuser de la sémantique.
Non, pas vraiment. Vous pouvez cependant faire quelque chose comme ceci:
<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 avec grâce.
Vous pouvez utiliser CSS pour que <input type="submit">
ressemble à un lien hypertexte.
Si cela sert à quelqu'un:
<a href="/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>
Réponse simple: non. Vous devez utiliser javascript pour faire ce genre de chose; depuis quand vous faites un POST, vous envoyez les données de la requête HTTP. Avec get, vous l'envoyez simplement dans le cadre de la chaîne (vous pouvez donc le faire avec la valeur href
).
Non clairement pas sans un javascript submit ().
Non, il n'y a aucun moyen de faire cela sans l'utilisation de scripts. Bien que vous puissiez utiliser CSS pour créer un style pour un bouton standard Soumettre, il ressemblera plus à une balise.
Vous devriez ajouter data-method = "post"
Par exemple: <a href="/some-link" data-method="post">Logout</a>
Les deux manières auxquelles je pense sont avec JavaScript (comme vous l'avez dit) ou via serveur-scription.
En gros, vous enverriez la demande GET (avec le A) à un fichier serveur, ce qui changerait les vars GET en POST, puis le soumettrait immédiatement (emplacement de la redirection). Mais cela ferait foirer les statistiques du référent, je pense.