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