提交表单并保持在同一页面上?

我有一个看起来像这样的表单

<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的东西。