2013-10-18 125 views
0

我有一个表单,用户可能会提交多次。以下是我的submit活动中包含的代码。jQuery ajax done()多次调用

当用户第一次提交表单时,一切都很好,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); 
    } 
}); 

这是怎么回事?我做错了什么,或者我该如何解决?我以前从未遇到过这个问题,但我不确定发生了什么。

+0

可能得到一个http://jsfiddle.net/与此行动? –

+0

我们需要看到提交事件代码 –

+1

我猜想你每次都通过表单重新添加一个新的事件处理程序,所以他们堆积如山,在3次提交之后,你有3个事件处理程序,每个处理程序都会被调用。您必须自己查看该代码或将其包含在此处,以便我们可以进一步提供帮助。 – jfriend00

回答

0

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

1

因为我在我的评论中发现了问题,所以我会将其转化为答案。

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

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