Подтвердить что ты не робот

POST из тега <a>

Возможно ли сделать POST только с тегом <a>? Я знаю, что привязывающие теги, как правило, просто для GET, и я знаю, что могу использовать javascript для этого (например, JavaScript post request, как отправить форму), но для меня это кажется немного беспорядочно. Есть ли способ сделать это с прямым HTML?

4b9b3361

Ответ 1

Нет способа POST элемента a использовать только HTML.

Как видно из этого фрагмента 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.

Вам нужно script его, если вы хотите злоупотреблять семантикой.

Ответ 2

Не совсем, нет. Вы можете, однако, сделать что-то вроде этого:

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

Однако вы должны найти лучший способ. Это не грамотно деградирует.

Ответ 3

Вы можете использовать CSS, чтобы сделать <input type="submit"> похожим на гиперссылку.

Ответ 4

В случае, если он служит кому-то:

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

Ответ 5

Простой ответ: нет. Для этого нужно использовать javascript; поскольку, когда вы выполняете POST, то, что вы делаете, отправляет данные в HTTP-запрос. С помощью get вы просто отправляете его как часть строки (таким образом, вы можете сделать это с помощью значения href).

Ответ 6

Нет явно не без javascript submit().

Ответ 7

Нет никакого способа сделать это без использования сценариев. Хотя вы можете использовать CSS для стилизации стандартной кнопки "Отправить", чтобы выглядеть и действовать скорее как тег.

Ответ 8

Два способа, о которых я думаю, связаны с JavaScript (как вы сказали) или с помощью сценария сервера.

В основном вы отправляете запрос GET (с A) на какой-либо файл сервера, который будет менять GET-вары на POST, а затем повторно отправить мгновенно (перенаправить местоположение). Но это может испортить статистику рефери, о которой я думаю.

Ответ 9

Вы должны добавить data-method = "post"

Например: <a href="/some-link" data-method="post">Logout</a>

Ответ 10

По сути, вы не можете использовать тег привязки для запроса POST. Однако для этого есть простой способ взлома.

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

Я проверил это и уже использовал его в нашем производственном коде.