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 的输入 type="button" 加载页面和表单后

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

所有值都通过 POST 到达一个 php 页面,该页面完成了所有操作(验证、插入数据库、更新日志...),如果一切正常,则用“OK”回答(因此模式窗口中的表单被自定义消息替换,并且淡出)或...如果出现错误,php 会回答一些文本,这些文本会弹出 js 并发出警报,使模式窗口与表单一起打开。

没关系,但是,如果 php 回答错误,则第二次单击 SEND 按钮,帖子将被发送 2 次。如果我在第二次发送时再次出错,然后再次单击发送按钮,则帖子值将发送三次......等等。

我能做些什么?我的错误在哪里?

谢谢。

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 请求取回数据时,是否有可能在代码中的某个地方将提交事件绑定到表单?

我无法在您在此处提交的代码中检查这一点。

于 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 回答