提交表单并保持在同一页面上?
我有一个看起来像这样的表单
<form action="receiver.pl" method="post"> <input name="signed" type="checkbox"> <input value="Save" type="submit"> </form>
我想保持在同一页面上,当点击提交,但仍然有receiver.pl
执行。
应该怎么做?
最简单的答案是:jQuery。 做这样的事情:
$(document).ready(function(){ var $form = $('form'); $form.submit(function(){ $.post($(this).attr('action'), $(this).serialize(), function(response){ // do something here on success },'json'); return false; }); });
如果你想dynamic地添加内容,仍然需要它的工作,并与多个表单,你可以这样做:
$('form').live('submit', function(){ $.post($(this).attr('action'), $(this).serialize(), function(response){ // do something here on success },'json'); return false; });
99%的时间我会使用XMLHttpRequest或获取像这样的东西。 但是,有一个替代解决scheme,不需要JavaScript …
您可以在页面上包含隐藏的iframe,并将表单的目标属性设置为指向该iframe。
<style> .hide { position:absolute; top:-1px; left:-1px; width:1px; height:1px; } </style> <iframe name="hiddenFrame" class="hide"></iframe> <form action="receiver.pl" method="post" target="hiddenFrame"> <input name="signed" type="checkbox"> <input value="Save" type="submit"> </form>
有很less的情况下,我会select这条路线。 一般来说,处理它与JavaScript是更好的,因为与JavaScript你可以…
- 优雅地处理错误(例如重试)
- 提供UI指标(例如加载,处理,成功,失败)
- 在发送请求之前运行逻辑,或者在收到响应之后运行逻辑。
HTTP / CGI方法可以使程序返回204(无内容)的HTTP状态码。
当你点击提交button时,页面被发送到服务器。 如果你想发送asynchronous,你可以用ajax来完成。
只需使用: action=""
。 没有什么需要像JavaScript的东西。