首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用$.ajax的jquery post,如何避免多次发布?

使用$.ajax的jquery post,如何避免多次发布?
EN

Stack Overflow用户
提问于 2012-06-20 17:49:39
回答 4查看 1.1K关注 0票数 2

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

代码语言:javascript
运行
复制
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=”加载页面和表单后

代码语言:javascript
运行
复制
$('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次。如果我在第二次发送时再次出错,并再次单击发送按钮,则post值将发送三次……诸若此类。

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

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-20 18:27:10

尝试排除提交块:

代码语言:javascript
运行
复制
 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);
            }
        }
        });

    });
   // }

并在加载页面后:

代码语言:javascript
运行
复制
   $('form.standard [name="SEND"]').click(function(){
                var str = $('#sortableTo').serializelist();
            formStantardAction('New train inserted.',str);
//excluding submit event
               // $('form.standard').submit();
            });

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

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

票数 1
EN

Stack Overflow用户

发布于 2012-06-20 17:55:31

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

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

票数 0
EN

Stack Overflow用户

发布于 2012-06-20 17:58:20

创建一个全局变量作为标志

代码语言:javascript
运行
复制
var flag = 0;

在发布时检查此标志,并在完成后将其重置

代码语言:javascript
运行
复制
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);
            }
        }
        });

    });
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11116908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档