【问题标题】:ajax post triggering twiceajax post 触发两次
【发布时间】:2012-01-04 19:54:02
【问题描述】:

在 asp.net mvc3 应用程序中有一个表单。表单是通过 jquery post 发布的。下面是相关代码。

                $(this).find('form').live('submit', function () {
                    var request = $.post($(this).attr('action'), $(this).serialize(), function (data) {
                       //do something    
                    });
                    request.fail(function (jqXHR, textStatus) {
                       //do something    
                    });
                    return false;
                });

使用 live() 是因为表单是通过 ajax 加载的,我不想每次通过 ajax 检索表单时都绑定点击事件。

问题是单击提交导致表单被发布两次。在 chrome 和 IE9 中测试,两者都出现。

  • 我检查了页面是否包含任何其他表单,但只有 1 个表单。

  • 我禁用了两个浏览器中的所有扩展(firebug 可能会导致此问题)

  • 页面上没有任何资源导致 404(即图像)。

那么还有什么可能导致这个问题?

【问题讨论】:

    标签: jquery .net asp.net-mvc forms post


    【解决方案1】:

    我怀疑您将表单或提交按钮绑定了两次。有一个bookmarklet 称为视觉事件(不是我的)。如果是这种情况,请运行检查。正如 kaz 所说,没有实际的 html 就不能做很多事情

    【讨论】:

    • 按你说的绑定了两次。讨厌的错误是它。很好的预测:)
    【解决方案2】:

    没有html标记很难分辨,也许你有两个嵌套的表单?

    尝试使用 event.stopPropagation 或 preventDefault:

    $(this).find('form').live('submit', function (e) {
            e.stopPropagation();
            e.preventDefault();
            var request = $.post($(this).attr('action'), $(this).serialize(), function (data) {
                        });
            request.fail(function (jqXHR, textStatus) {
                           //do something    
            });
            return false;
    });
    

    【讨论】:

    • 怎么样:$(this).find('form').unbind('submit').live('submit', (...)
    【解决方案3】:

    这就是为我做的。我有一个 Ajax 表单,我唯一要做的就是:

    $('#docForm').ajaxForm({
    
      ...Do Some Mildly Cool Stuff Code...
    
    }).submit(function (e) {
      return false;
    }); //Just add the submit to the end.
    

    仅此而已。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      相关资源
      最近更新 更多