47 votes

POST à partir d'une balise <A>

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 ?

36voto

minitech Points 87225

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.

32voto

Oded Points 271275

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.

12voto

SLaks Points 391154

Vous pouvez utiliser le CSS pour faire un <input type="submit"> ressemble à un lien hypertexte.

7voto

thusharaK Points 765

En fait, vous ne pouvez pas utiliser une balise d'ancrage pour une requête POST. Toutefois, il existe un moyen simple d'y parvenir.

<form id="myform" method="post" action="target.html"></form>
<a onclick="document.getElementById('myform').submit();">Submit to action</a>

Testé et fonctionne bien.

5voto

nasatome Points 11

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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X