POST из тега <A> - PullRequest
       4

POST из тега <A>

38 голосов
/ 30 мая 2011

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

Ответы [ 9 ]

30 голосов
/ 30 мая 2011

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

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

Вы должны найти лучший способ.Этот не изящно ухудшается.

25 голосов
/ 30 мая 2011

Невозможно 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.

У вас есть для сценария, если вы хотите злоупотребить семантикой.

9 голосов
/ 30 мая 2011

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

3 голосов
/ 28 мая 2018

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

<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>
2 голосов
/ 30 мая 2011

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

1 голос
/ 30 мая 2011

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

1 голос
/ 30 мая 2011

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

0 голосов
/ 20 декабря 2018

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

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

0 голосов
/ 31 мая 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...