web-dev-qa-db-ja.com

POST <A>タグから

POSTを単に<a>タグ?アンカータグは通常GET専用であり、javascriptを使用してこれを行うことができることを知っています( フォーム送信のようなJavaScriptのポストリクエスト )。ストレートHTMLでこれを行う方法はありますか?

39
Carrotman42

HTMLのみを使用してPOSTa要素を作成する方法はありません。

この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 --
  >

POSTまたはGET要素でaを使用するかどうかを制御する属性はありません。

セマンティクスを悪用する場合は、スクリプトを作成する必要がありますhave

25
Oded

そうでもないただし、次のようなことができます。

<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>

ただし、より良い方法を見つける必要があります。これは正常に劣化しません。

31
Ry-

CSSを使用して、<input type="submit">をハイパーリンクのように見せることができます。

9
SLaks

誰かにサービスを提供する場合:

<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>
4
nasatome

簡単な答え:いいえ。このようなことをするにはJavaScriptを使用する必要があります。 POSTを行うと、HTTPリクエストでデータを送信することになります。getでは、文字列の一部として送信するだけです(したがって、 href値)。

2
MarioRicalde

明らかに、javascript submit()なしではありません。

1
VGE

いいえ、スクリプトを使用せずにこれを行う方法はありません。ただし、CSSを使用して標準の[送信]ボタンのスタイルを設定し、タグのような外観と動作を実現できます。

1
Dan

Data-method = "post"を追加する必要があります

例えば: <a href="/some-link" data-method="post">Logout</a>

0
Iryna Batvina

私が考える2つの方法は、JavaScript(あなたが言ったように)を使用するか、サーバースクライブを使用することです。

基本的に、GETリクエスト(Aを含む)をサーバーファイルに送信すると、GET varsがPOSTに変更され、すぐに再送信(リダイレクト場所)されます。リファラーの統計。

0
ecchymose