标记向 showMessage.jsp 提交 POST 表单?" /> 标记向 showMessage.jsp 提交 POST 表单?"> 标记向 showMessage.jsp 提交 POST 表单?" />
ChatGPT解决这个技术问题 Extra ChatGPT

如何使用 <a href="..."> 标签提交 POST 表单?

如何仅使用 <a href="..."> 标记向 showMessage.jsp 提交 POST 表单?

<form action="showMessage.jsp" method="post">
    <a href="showMessage.jsp"><%=n%></a>
    <input type="hidden" name="mess" value=<%=n%>/>
</form>
Submit form using a link on JSP 的可能重复项

r
rybo111

如果您使用按钮,则不需要 JavaScript:

<form action="your_url" method="post">
    <button type="submit" name="your_name" value="your_value" class="btn-link">Go</button>
</form>

您可以style a button to look like a link,例如:

.btn-link {
    border: none;
    outline: none;
    background: none;
    cursor: pointer;
    color: #0000EE;
    padding: 0;
    text-decoration: underline;
    font-family: inherit;
    font-size: inherit;
}

因为您的“方法”不使用 a 标记。
一切都很好,但您仍然选择回答与被问到不同的问题。鉴于可擦墨水实际上是一种工业规模生产的可行产品……
FWIW,我对您的回答表示同情,这是我个人更希望在我必须维护的网络应用程序中看到的。我只是在解释反对票——顺便说一句,我没有离开。 ;)
class="btn btn-link" 用于引导
完美满足我的需求!
P
Piotr Nowicki

您需要为此使用 javascript。

<form id="form1" action="showMessage.jsp" method="post">
    <a href="javascript:;" onclick="document.getElementById('form1').submit();"><%=n%></a>
    <input type="hidden" name="mess" value=<%=n%>/>
</form>

佚名

您必须在您的 form 对象上使用 Javascript submit 函数。看看其他 functions

<form action="showMessage.jsp" method="post">
    <a href="javascript:;" onclick="parentNode.submit();"><%=n%></a>
    <input type="hidden" name="mess" value=<%=n%>/>
</form>

表单元素不一定总是锚标记的父节点。
A
Alexey Shevelyov

如果你使用 MVC 来完成它 - 你将不得不做这样的事情

 <form action="/ControllerName/ActionName" method="post">
        <a href="javascript:;" onclick="parentNode.submit();"><%=n%></a>
        <input type="hidden" name="mess" value=<%=n%>/>
    </form>

我只是在这里浏览了一些示例,并没有看到 MVC 认为发布它不会有什么坏处。

然后在控制器中的操作上,我只需将 <HTTPPost> 放在它的顶部。我相信如果你没有在它的顶部有 <HTTPGET> 它仍然可以工作,但明确地将它放在那里感觉更安全一些。


L
Laid

似乎没有办法将 <a href= .. 欺骗为 POST 方法。但是,鉴于您可以访问页面的 CSS,这可以通过使用表单来代替。

不幸的是,将 CSS 中的按钮样式化为锚标记的明显方式不兼容跨浏览器,因为不同的浏览器对待 <button value= ... 的方式不同。

Incorrect:

<form action='actbusy.php' method='post'>
  <button type='submit' name='parameter' value='One'>Two</button>
</form>

上面的示例将在 FireFox 中显示“Two”并传输“parameter:One”,而在 IE8 中将显示“One”并同时传输“parameter:One”。

解决方法是使用隐藏的输入字段来传递数据,并使用按钮来提交数据。

<form action='actbusy.php' method='post'>
   <input class=hidden name='parameter' value='blaah'>
   <button type='submit' name='delete' value='Delete'>Delete</button>
</form>

请注意,此方法有一个副作用,即除了 'parameter:blaah' 之外,它还会在 POST 中将 'delete:Delete' 作为多余参数传递。

您希望为按钮保持标签之间的值属性和按钮标签相同(在这种情况下为“删除”),因为(如上所述)某些浏览器将显示一个,而另一些浏览器将另一个显示为按钮标签。


你确定IE8能做到吗?刚刚在 IE7 中尝试了 <button value="Bad">Good</button>,它显示“良好”。
S
Sinus the Tentacular

我使用 jQuery 脚本为我的 POSTable 链接创建“影子”表单。

我写的不是 <a href="/some/action?foo=bar">,而是 <a data-post="/some/action" data-var-foo="bar" href="#do_action_foo_bar">。该脚本创建一个带有隐藏输入的隐藏表单,并在单击链接时提交它。

$("a[data-post]") .each(function() { let href = $(this).data("post"); if (!href) return; let $form = $("

").attr({ method:"POST",action:href }).css("display","none") let data = $(this).data() for (let dat in data) { if (dat.startsWith("postVar")) { let varname = dat.substring(7).toLowerCase() // postVarId -> id let varval = data[dat] $form.append($("").attr({ type:"hidden",name:varname,value:varval })) } } $("body").append($form) $(this).data("postform",$form ) }) .click(function(ev) { ev.preventDefault() if ($(this).data("postform")) $(this).data("postform").submit(); else console.error (" 中没有设置 .postform") })