标记向 showMessage.jsp 提交 POST 表单?" /> 标记向 showMessage.jsp 提交 POST 表单?"> 标记向 showMessage.jsp 提交 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>
如果您使用按钮,则不需要 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;
}
您需要为此使用 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>
如果你使用 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>
它仍然可以工作,但明确地将它放在那里感觉更安全一些。
似乎没有办法将 <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' 作为多余参数传递。
您希望为按钮保持标签之间的值属性和按钮标签相同(在这种情况下为“删除”),因为(如上所述)某些浏览器将显示一个,而另一些浏览器将另一个显示为按钮标签。
<button value="Bad">Good</button>
,它显示“良好”。
我使用 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") })
a
标记。