使用$ .ajax的jquery帖子,如何避免多个帖子?

时间:2012-06-20 09:49:39

标签: php jquery http-post

仍在寻找解决方案但尚未找到,我有一个功能来管理相同/不同页面上的不同表单

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

的输入类型=“按钮”加载页面和表单后
$('form.standard [name="SEND"]').click(function(){
            var str = $('#sortableTo').serializelist();
        formStantardAction('New train inserted.',str);
            $('form.standard').submit();
        });

所有值都通过POST到达一个php页面,它完成了所有的事情(验证,插入数据库,更新日志...),如果一切正常,则回答'OK'(因此模态窗口中的表单被替换为自定义消息和淡出)或...如果有错误,php回答一些文本,js弹出一个警告,保持模态窗口打开表单。

一切都好但是,如果php回答错误,再次点击按钮发送帖子发送2次。 如果我在第二次发送时再次出现错误,再次单击“发送”按钮,则会发送三次发布值...依此类推。

我该怎么办?我的错误在哪里?

感谢。

4 个答案:

答案 0 :(得分: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();
            });

因为类型为“Post”的$ .ajax {}已经是提交过程,然后当脚本调用提交时,它会重新提交。

希望这是正确的,并提供帮助

答案 1 :(得分:0)

每次从ajax-request获取数据时,是否可能在代码中的某处将提交事件绑定到表单?

我无法在您提交的代码中查看此内容。

答案 2 :(得分: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);
            }
        }
        });

    });
    }

答案 3 :(得分: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);
        }
    }
    });

});
}