1

我有一个用户可能会多次提交的表单。以下是我的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);
    }
});

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

4

2 回答 2

2

由于我在评论中发现了问题,我将把它变成答案。

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

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

于 2013-10-19T01:31:25.637 回答
1

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

于 2013-10-18T21:48:07.580 回答