Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery ajax done()被多次调用_Jquery_Ajax_Forms_Jquery Deferred - Fatal编程技术网

jQuery ajax done()被多次调用

jQuery ajax done()被多次调用,jquery,ajax,forms,jquery-deferred,Jquery,Ajax,Forms,Jquery Deferred,我有一个表单,用户可能会提交多次。下面是我的submit事件中包含的代码 当用户第一次提交表单时,一切正常,done回调执行一次。在接下来的每次提交表单时,执行done回调,但是表单提交了多少次,其中data参数是最近提交的数据 var $form = $(e.currentTarget); $.ajax({ url: $form.attr('action'), data: $form.serialize(), type: 'POST' }.done(function(d

我有一个表单,用户可能会提交多次。下面是我的
submit
事件中包含的代码

当用户第一次提交表单时,一切正常,
done
回调执行一次。在接下来的每次提交表单时,执行
done
回调,但是表单提交了多少次,其中
data
参数是最近提交的数据

var $form = $(e.currentTarget);
$.ajax({
    url: $form.attr('action'),
    data: $form.serialize(),
    type: 'POST'
}.done(function(data) {
    if (data.success === true) {
        alert('success!');
    } else {
        alert(data.errors);
    }
});

发生了什么事?我做错了什么,或者我该如何修复它?我以前从来没有遇到过这个问题,我不知道发生了什么。

好吧,我的错。每次显示
submit
事件时,我都会不知不觉地将它绑定到表单中(它通常是隐藏的)。我没有注意到整个请求被多次发送,而不仅仅是
done
回调。

由于我在评论中发现了问题,我将把它转化为一个答案

最可能的情况是,您每次都要重新绑定表单提交事件处理程序,以便为每个已绑定的事件处理程序调用一次代码。这不仅会每次调用
.done()
,还会多次调用
ajax()
函数


解决这个问题的地方是绑定submit事件处理程序的地方。它应该只绑定一次,而不是每次使用表单时都绑定一次。

是否可以通过此操作获取一个事件处理程序?我们需要查看提交事件代码。我猜您每次都会通过表单重新添加一个新的事件处理程序,因此它们会堆积起来。提交3次后,您有3个事件处理程序,每个事件处理程序都会被调用。您必须亲自查看该代码或将其包含在此处,以便我们能够进一步提供帮助。@jfriend00我相信这正是正在发生的事情。似乎
完成了
绑定到表单或其他东西并保持在那里。