【问题标题】:Javascript function not waiting for AJAX responseJavascript函数不等待AJAX​​响应
【发布时间】:2013-12-27 22:01:21
【问题描述】:

我有一个名为flagIt() 的AJAX 函数,它是从另一个名为validateForm() 的函数中调用的。 validateForm() 在提交时执行。

function validateForm(){
    var error = "";
    //do stuff to validate form
    if(error == ""){
        flagIt();
    }else{
      window.alert(error);
      return false;
    }
} 

如上所示,它将调用flagIt(),但随后允许表单提交而无需等待我在flagIt() 中执行的AJAX 的响应。

如果我在调用flagIt() 之后添加window.alert('something');,它有时间执行AJAX,一切正常。

如何强制validateForm() 函数等待我的 AJAX,然后才允许提交表单而不添加警报?

我试过return flagIt()

编辑

为了澄清,我没有在 AJAX 中提交表单。我正在更新数据库。

【问题讨论】:

  • 您可以在 ajax 中使用 async:false 或在 flagIt() 之后使用 return false; 并在 ajax 的成功函数中提交您的表单
  • 你的ajax函数在哪里,请显示代码。
  • 你不明白“Ajax”中的“A”是什么吗?
  • 如果你只是更新数据库,不需要提交表单的意思,在flagIt()之后返回false即可!
  • 我正在提交表单,而不是通过 AJAX。

标签: javascript html ajax


【解决方案1】:

您可以在 ajax 中使用 async:false 或在 flagIt() 之后使用 return false; 并使用 document.myform.submit(); 在 ajax 的成功函数中提交您的表单

【讨论】:

  • 我在onreadystatechange 函数中尝试了document.getElementById("form2").submit();,但由于某种原因它没有提交表单。为什么会这样?
【解决方案2】:

只是添加到我的评论中

您的代码不会停在flagIt(),因为它是一个 AJAX ,它是异步

如果您希望它停止并等待 AJAX 调用完成,您必须将 async 标志设置为 false

xmlhttpp.open("GET",url,false);

是的,你可以称之为 SJAX

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 2013-02-21
    相关资源
    最近更新 更多