0

POST我在这个网站上发现了一种无需离开页面即可提交表单的方法。在该脚本中,他们说明了如何在提交表单后执行功能。脚本如下所示:

$(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。请帮忙。谢谢。

4

3 回答 3

0

使用 $.post,“函数(响应)”仅在成功结果后调用,因此您在服务器处理请求时被错误地告知在此函数中执行工作。

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

$form.submit(function(){
  $.post(
    $(this).attr('action'), $(this).serialize(), 
    function(response){
    }
    ,'json'
  );
  $('form').hide();
  return false;
});
于 2012-05-15T23:08:03.597 回答
0

问题:

  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;
    });
});
于 2012-05-15T23:33:40.840 回答
-1

当表单更改为时,您的小提琴工作正常

<form action="#" method="post">

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 的引用?

于 2012-05-15T23:08:22.460 回答