2016-10-03 7 views
0

私はPHPフォームを設定していますが、それは自分自身ではうまくいきますが、今はAJAXに接続しました。誰かがフォームを提出したときに重複した投稿を受け取りました。彼らは一度詳細をデータベースに複数回追加するとフォームを提出しただけです。提出時にAJAXフォームが複写されます

私のテストでは、データを2回送信したように見えますが、他の人からの投稿を見ると、特定の状況で2回以上実行している可能性がありますが、それを再現できませんでした。ここで

は、私が最初に使用したコードです。

$("#email-gather").submit(function(e) { 

    var url = "https://www.ruroc.com/emailgather.php"; 

     $.ajax({ 
       type: "POST", 
       url: url, 
       data: $("#email-gather").serialize(), 
       complete: function(data) { 
        $('.email-win input.button').val("submitted").attr('disabled', 'disabled').css({'background-color' : '#b34c4c','text-shadow' : 'none'}); 
       } 
     }); 
     e.preventDefault(); 
    }); 

私は解決策を見つけるために周りを見て持っていたと私は同様の問題が.liveではなく.submitの使用すべきであると言って少数の人々を見ました私は、これは、この私のコードを改正:

$("#email-gather").live("submit", function() { 

    event.preventDefault(); 
    var url = "https://www.ruroc.com/emailgather.php"; 

    $.ajax({ 
      type: "POST", 
      url: url, 
      data: $("#email-gather").serialize(), 
      complete: function(data) { 
       $('.email-win input.button').val("submitted").attr('disabled', 'disabled').css({'background-color' : '#b34c4c','text-shadow' : 'none'}); 
      } 
    }); 
}); 

私はあなたがこの問題の解決策を持っているかもしれません願っていますので、しかし、これはまた同じ問題になりました。私はあなたがその問題について提供できる助けに感謝します。

+0

一意のインデックスが必要でしょう – e4c5

+0

非同期 '.ajax'呼び出しを実行する前に' e.preventDefault(); 'を呼び出す必要があります。 – RiggsFolly

+0

2番目のフラグメントでは、正しい順序で物事を持っていますが、最初のフラグメントでは '$("#email-gather ")を実行しません。私は思っただろうコンパイルエラーを生成する必要があります___ – RiggsFolly

答えて

0

(動作するはずの)コードの2番目の部分では、event.preventDefaultがありますが、イベントが定義されていません。関数(イベント)を追加しようとすると動作する必要があります。

これ以外の場合は、ajax呼び出しの前にデフォルトを防止して、2番目の送信を取り除くことができます。 ajax関数にreturn trueを追加して、スクリプトが成功したことをスクリプトに伝える必要があります。

+0

とても速い応答に感謝しました。 – cyanoxide

+0

完全な機能で本当に返品しましたか? –

+0

$( "#email-gather").live( "submit"、functイオン(イベント){ event.preventDefault(); var url = "https://www.ruroc.com/emailgather.php"; $アヤックス({ タイプ: "POST"、 URL:URL、 データ:$() "#電子メール収集")(シリアライズ、 完全:。。機能(データ){ $を(」メールcss({'background-color': '#b34c4c'、 'text-shadow': 'none'})を指定すると、 ); trueを返します; } }); }); – cyanoxide

関連する問題