2

まだ解決策を探していますが、まだ見つかりません。同じ/異なるページで異なるフォームを管理する機能があります

function formStantardAction(correctAnswer,addCustomData){
        addCustomData = (typeof addCustomData == "undefined")?'':addCustomData;
    correctAnswer = (typeof correctAnswer == "undefined")?'Saved.':correctAnswer;
    $('form.standard').submit(function(event){
        event.preventDefault();
        var modalWin = $(this).parent();
        var values = $('form.standard').serialize() + addCustomData;
        $.ajax({
        url: "inc/gateway.php",
        data: values,
        type: "POST",
        success: function(data){
            if (data == "OK"){
                $(modalWin).html(correctAnswer).delay(500).fadeOut(500);
                setTimeout(function() {
                    mw_close();
                }, 1000);
            }else{
                alert(data);
            }
        }
        });

    });
    }

SEND という名前の input type="button" を使用してページとフォームをロードした後

$('form.standard [name="SEND"]').click(function(){
            var str = $('#sortableTo').serializelist();
        formStantardAction('New train inserted.',str);
            $('form.standard').submit();
        });

すべての値は POST 経由で php ページに到達し、すべての処理 (検証、データベースへの挿入、ログの更新など) が行われ、すべてが OK の場合は「OK」と応答します (したがって、モーダル ウィンドウのフォームはカスタム メッセージに置き換えられ、フェード アウト) または... エラーが発生した場合、php は、モーダル ウィンドウをフォームで開いたままにしておく警告と共に js がポップアップするテキストで応答します。

それはすべて問題ありませんが、phpがエラーで応答した場合、SENDボタンを2回クリックすると、投稿が2回送信されます。そして、2回目の送信で別のエラーを起こし、もう一度送信ボタンをクリックすると、投稿値が3回送信されます...など.

私に何ができる?私のエラーはどこですか?

ありがとう。

4

4 に答える 4

1

送信ブロックを除外してみてください:

 function formStantardAction(correctAnswer,addCustomData){
        addCustomData = (typeof addCustomData == "undefined")?'':addCustomData;
    correctAnswer = (typeof correctAnswer == "undefined")?'Saved.':correctAnswer;
    //$('form.standard').submit(function(event){
     //   event.preventDefault();
//change 'this' to form.standard
        var modalWin = $('form.standard').parent();
        var values = $('form.standard').serialize() + addCustomData;
        $.ajax({
        url: "inc/gateway.php",
        data: values,
        type: "POST",
        success: function(data){
            if (data == "OK"){
                $(modalWin).html(correctAnswer).delay(500).fadeOut(500);
                setTimeout(function() {
                    mw_close();
                }, 1000);
            }else{
                alert(data);
            }
        }
        });

    });
   // }

そしてロードされたページの後:

   $('form.standard [name="SEND"]').click(function(){
                var str = $('#sortableTo').serializelist();
            formStantardAction('New train inserted.',str);
//excluding submit event
               // $('form.standard').submit();
            });

type:"Post" の $.ajax {} は既に送信プロセスであるため、スクリプトが送信を呼び出すと、再送信されます。

この権利と助けを願っています

于 2012-06-20T10:27:10.073 に答える
0

コードのどこかで、ajax-requestからデータを取得するたびに送信イベントをフォームにバインドする可能性はありますか?

ここに送信したコードでは確認できません。

于 2012-06-20T09:55:31.447 に答える
0

フラグとしてグローバル変数を作成する

var flag = 0;

投稿中にこのフラグを確認し、完了後にリセットします

function formStantardAction(correctAnswer,addCustomData){
       **if(flag == 1){
           return false;
       }
       flag = 1;**
        addCustomData = (typeof addCustomData == "undefined")?'':addCustomData;
    correctAnswer = (typeof correctAnswer == "undefined")?'Saved.':correctAnswer;
    $('form.standard').submit(function(event){
        event.preventDefault();
        var modalWin = $(this).parent();
        var values = $('form.standard').serialize() + addCustomData;
        $.ajax({
        url: "inc/gateway.php",
        data: values,
        type: "POST",
        success: function(data){
           **flag = 0;**
            if (data == "OK"){
                $(modalWin).html(correctAnswer).delay(500).fadeOut(500);
                setTimeout(function() {
                    mw_close();
                }, 1000);
            }else{
                alert(data);
            }
        }
        });

    });
    }
于 2012-06-20T09:58:20.277 に答える
0

サブミット関数の先頭にカスタム コードを配置します。基本的に、サブミットが進行中の場合は何も実行しないでください。それ以外の場合は、通常どおりエラー メッセージを返します。

var submitting = false; //initialise the variable, this needs to be out of the function!
function formStantardAction(correctAnswer,addCustomData){
    addCustomData = (typeof addCustomData == "undefined")?'':addCustomData;
correctAnswer = (typeof correctAnswer == "undefined")?'Saved.':correctAnswer;

$('form.standard').submit(function(event){
    if (submitting) {
        return false; //if a submit is in progress, prevent further clicks from doing anything
    } else {
        submitting = true; //no submit in progress, but let's make one now
    }
    event.preventDefault();
    var modalWin = $(this).parent();
    var values = $('form.standard').serialize() + addCustomData;
    $.ajax({
    url: "inc/gateway.php",
    data: values,
    type: "POST",
    success: function(data){
        if (data == "OK"){
            $(modalWin).html(correctAnswer).delay(500).fadeOut(500);
            setTimeout(function() {
                mw_close();
            }, 1000);
        }else{
            alert(data);
        }
    }
    });

});
}
于 2012-06-20T09:58:46.013 に答える