【问题标题】:Ajax Call executing twice?Ajax 调用执行两次?
【发布时间】:2012-09-23 11:28:22
【问题描述】:

为什么这个 ajax 调用会给我两个答案?首先,以一种几乎不明显的方式是正确答案,然后是另一个?

表单页面

   $(document).on('click','.save-action',function(){
                    //var text = tinyMCE.get('#action-desc').getContent(); 
                    if($("#form-save-action").validationEngine('validate'))
                    {

                        $.ajax({
                            type: "POST",
                            cache: false,
                            data: $("#form-save-action").serialize(),
                            url:"modules/actions/insertaction.php",      

                            success : function (data) {

                               $("#response-message").html(data);

                            }
                        })
                    }

                }); 
Adicionar Acção 名称 da acção 描述
格拉瓦

插入操作.php

$exists = $action->actionExists($actionName);



if($exists == 0)
{
        $action->insertAction(array($actionName,$action->clearContent($actionDesc),1));
        echo 'Acção adicionada com sucesso!'; 
}
if($exists >= 1)
{
      echo 'Acção já existe!'; 
}

因此,如果我单击 .save-action 按钮,它会首先返回正确答案,然后是另一个。

PS:ajax 调用被包裹在$(document).readyfunction 中

【问题讨论】:

  • 这个表单是动态加载的吗?
  • 脚本是否只包含在页面中一次?似乎该脚本可能包含两次..?
  • 可能你在元素上绑定了两次相同的函数
  • 请发布 HTML... 我们暗示的是您调用了该函数两次。如果我们有完整的源代码会有所帮助...
  • @JoãoDias:如果您再次发现自己处于这种情况并且无法确定第二次绑定的来源,您可以使用$(document).off('click', '.save-action').on('click','.save-action',function(){ 在查找时解决此问题原因。 off().on() 不应该是一个永久的解决方案,因为它会解除与目标的所有点击事件的绑定,但在寻找真正的解决方案时它可以是一个临时修复。

标签: php jquery


【解决方案1】:

只是为了给出一个正式的答案(这是在 cmets 中发现的):

脚本被调用了两次。通过 HTML 属性,或者在加载时。您需要确保不会两次运行脚本,否则事件处理程序将被添加两次(因此,该函数将运行两次)。

【讨论】:

    【解决方案2】:

    尝试直接将动作绑定到类

    $('.save-action').click(function(e){
                   e.preventDefault();
                    //var text = tinyMCE.get('#action-desc').getContent(); 
                    if($("#form-save-action").validationEngine('validate'))
                    {
    
                        $.ajax({
                            type: "POST",
                            cache: false,
                            data: $("#form-save-action").serialize(),
                            url:"modules/actions/insertaction.php",      
    
                            success : function (data) {
    
                               $("#response-message").html(data);
    
                            }
                        })
                    }
    
                }); 
    

    【讨论】:

    • 这不起作用,因为表单正在由 ajax 加载。需要通过.on函数
    • jQuery 的解释方式不完全相同吗?我很确定它们触发了相同的 jQuery 函数,并且它的解释方式相同
    • @cegfault 这取决于他是在每次加载时都包含脚本,还是在页面加载时只包含一次。
    • @JoãoDias 你真的尝试过这个解决方案吗?如果每次加载表单时都包含此脚本,这实际上可以解决问题。
    • 是的,我已经尝试过了,甚至在应用程序运行之前。我只知道,根据经验,当我通过 ajax 调用完全加载页面的每一点时,这不起作用
    猜你喜欢
    • 2016-06-03
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2013-03-08
    • 2015-09-26
    相关资源
    最近更新 更多