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我相信这正是正在发生的事情。似乎
完成了
绑定到表单或其他东西并保持在那里。