jQuery ajax done()被多次调用

时间:2013-10-18 21:24:43

标签: 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(data) {
    if (data.success === true) {
        alert('success!');
    } else {
        alert(data.errors);
    }
});

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

2 个答案:

答案 0 :(得分:2)

由于我在评论中发现了问题,我会将其转化为答案。

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

修复此问题的地方是绑定提交事件处理程序的位置。它应该只绑定一次,而不是每次使用表单。

答案 1 :(得分:1)

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