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

問題:

  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 に答える
0

$.post を使用すると、"function(response)" は結果が成功した後にのみ呼び出されるため、サーバーがリクエストを処理している間にこの関数内で作業を行うことについて誤解されています。

サーバーにリクエストを送信した後に処理を続行するには、$.post 呼び出しの後に $('form').hide() を配置します。

$form.submit(function(){
  $.post(
    $(this).attr('action'), $(this).serialize(), 
    function(response){
    }
    ,'json'
  );
  $('form').hide();
  return false;
});
于 2012-05-15T23:08:03.597 に答える
-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 に答える