在提交表单后执行脚本

我在这个网站上发现了一种在不离开页面的情况下提交POST表单的方法。 在该脚本中,他们提供了有关如何在提交表单后进行function的说明。 这是脚本的样子:

 $(document).ready(function(){ $form = $('form'); $form.submit(function(){ $.post($(this).attr('action'), $(this).serialize(), function(response){ },'json'); return false; }); });​ 

他们说,在function(response){},'json'); 表单提交后,您可以指定其他JavaScript,如警报等。 我试过了

 $(document).ready(function(){ $form = $('form'); $form.submit(function(){ $.post($(this).attr('action'), $(this).serialize(), function(response){ $('form').hide(); },'json'); return false; }); }); 

不幸的是,这不起作用,任何人都可以告诉我为什么? 我已经建立了一个jsFiddle 。 请帮忙。 谢谢。

使用$ .post,“函数(响应)”仅在成功结果后调用,因此在服务器处理请求时,您在此函数内做错了。

要在将请求发送到服务器后继续处理,请在$ .post调用之后放置$(’form’)。hide():

 $form.submit(function(){ $.post( $(this).attr('action'), $(this).serialize(), function(response){ } ,'json' ); $('form').hide(); return false; }); 

问题:

  1. 将JavaScript变量设置为form ,而不是$form 。 然后在jQuery中使用它作为$(form)
  2. $(this).attr('action')的上下文是$.post()回调, 而不是表单。 解决方案: $(form)而不是$(this)

解:

 $(document).ready(function(){ form = $('form'); $(form).on('submit', function() { $.post($(form).attr('action'), $(this).serialize(), function(response) { $('form').hide(); },'json'); return false; }); }); 

当表单改为时,你的小提琴工作得很好

 

http://api.jquery.com/jQuery.post/上的文档显示这是一种有效的语法,并且http://www.johnnycode.com/blog/2010/04/08/jquery-form-serialize- dont-post-submit-and-button-values-duh /也是一个正在运行的样本。 如果它对你来说根本不起作用,那就像这样愚蠢,你在页面中引用了jQuery吗?