防止表单数据在http请求后提交

时间:2018-02-22 11:48:12

标签: javascript jquery ajax promise

以下代码阻止提交表单数据

$('#dataForm').submit(function (e) {
   e.preventDefault();
});

我的问题是如何实现这一点,以防有一个需要时间来获得响应的ajax调用。 所以表单不会等到请求得到响应

$('#dataForm').submit(function (e) {
  ajaxCallAsPromise().then(function (data){
     if (data == true)
       {
         e.preventDefault(); //this will not work
       }
  });
  //any codes here works normally ..
});

我的目的是等到获得请求响应然后使用 -

e.preventDefault();

1 个答案:

答案 0 :(得分:2)

您必须立即致电preventDefault()以停止提交表单。没有办法避免这种情况,因为AJAX调用是异步的,你需要等待它。

但是,在AJAX调用完成后,您可以在表单元素上调用submit(),以便破坏jQuery事件处理程序并允许将表单发送到服务器,如下所示:

$('#dataForm').submit(function(e) {
  e.preventDefault(); // stop the submission
  var form = this;

  ajaxCallAsPromise().then(function(data) {
    if (!data) { // if data is verified, submit the form again
      form.submit();
    } else {
      // presumably you want to tell the user the data is invalid here...
    }
  });
});