【问题标题】:How do I keep my AJAX request from getting cancelled before form submit?如何防止我的 AJAX 请求在表单提交之前被取消?
【发布时间】:2014-08-25 17:36:35
【问题描述】:

我有一个表单提交处理程序,它需要在“默认”表单提交发生之前进行 AJAX 调用。

$('#form').on('submit', function (event) {
    { ... }
    $.ajax({
        type: "POST",
        data: data,
        url: "/submit"
    }).done(function() {
        { ... }
        // Do default form action here
        return true;
    });
});

ajax 调用上面的代码会运行,但只要进行 ajax 调用,表单就会提交,我会被重定向到操作 URL。

如何防止在调用 AJAX 回调之后发生默认表单提交?

【问题讨论】:

  • 这似乎总是一个可怕的模式,为什么要提交两次?
  • 我正在为第三方系统创建一个插件,该系统正在修改来自几个不同来源的数据。这是一个可怕的模式,但我不知道这个系统的另一种方式。

标签: javascript jquery ajax forms


【解决方案1】:

async: false 参数添加到您的ajax 方法中。这将使您的调用同步,并在 ajax 请求完成后立即提交表单。

【讨论】:

  • 将 ajax 请求设置为同步从来都不是一个好的选择。让我引用:“JavaScript 运行在浏览器的 UI 线程中,任何长时间运行的进程都会锁定 UI,使其无响应。此外,JavaScript 的执行时间有上限,浏览器会询问用户是否继续执行还是不执行。这一切都是非常糟糕的用户体验。用户将无法判断一切是否正常。此外,对于连接速度较慢的用户,效果会更差。更多stackoverflow.com/a/14220323/1306083
猜你喜欢
  • 2012-11-21
  • 2013-07-26
  • 1970-01-01
  • 2019-08-14
  • 2016-06-30
相关资源
最近更新 更多