jQuery ajax done() 被多次调用

标签 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);
    }
});

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

最佳答案

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

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

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

关于jQuery ajax done() 被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19459276/

相关文章:

javascript - 发布JSON数据时MVC Controller 的string[]参数为null

javascript - jQuery 字符计数 - 函数未被调用

jquery - 使用 jQuery 按文本内容选择选项

javascript - WebService C# (Ajax) 中缺少参数

css - 我怎样才能给输入样式标题背景?

html - 为什么要为 HTML 表单而不是表格使用定义列表(DL、DD、DT)标签?

forms - Member_Label 中的 Ruby on Rails Formtastic 多个选项

javascript - 在 Javascript 中更改 CSS 子类的值

javascript - 我的类原型(prototype)中的 Ajax 运行函数?

jquery - 如何使用 jquery ajax 调用 google map 地理编码服务