javascript - 如何根据 Ajax 请求的结果提交(或不提交)表单?

标签 javascript jquery ajax ruby-on-rails-4 asynchronous

我的网站上有一个表单,用户可以在其中提交内容并获取结果

<form accept-charset="UTF-8" action="/submit-stuff" data-remote="true" method="post">
<!-- various form fields -->
<input type="submit" value="Run Code" id="submit-button">
</form>

在将他们的信息提交到后端之前,我尝试使用 Javascript 获取结果。如果我能得到结果,我会在 Javascript 中返回 false 以阻止表单提交。

$('#submit-button').click(function() {
   if(canGetResults()){
     //deal with submission and then
     return false;
   }
   //the button will work as usual if canGetResults is false or there's an error 
});

这工作正常,但现在我想尝试通过另一个 ajax 请求获取结果,并且仅在失败时提交到我的常规后端。单击按钮后我调用以下代码:

$.post("http://example.com/submit-stuff", json, function(data) {
  //do stuff with data
});

但是,它是异步的(因此我无法从中返回结果),因此即使其他 ajax 尝试失败,代码也会达到 return false我应该如何解决这个问题,以便它只在 ajax 尝试失败时提交到我自己的后端?

我可以将 $.post 更改为 $.ajax 并使其同步,但通常不建议这样做。或者,我可以在 $.post 回调中提交表单,但我应该如何从那里提交整个表单?如果出现错误或http://example.com/submit-stuff,它还会提交吗?不起作用?

最佳答案

您的提交处理程序应始终阻止表单提交。

然后,如果 Ajax 代码返回 OK,您应该调用表单的 submit() 方法。这将绕过提交处理程序并提交表单。

注意:在 DOM 对象上调用 submit,而不是 jQuery 对象。 jQuery 习惯于从其包装器中触发事件处理程序。

关于javascript - 如何根据 Ajax 请求的结果提交(或不提交)表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25489289/

相关文章:

javascript - jQuery 变量无缘无故变得未定义

javascript - 无法在变量 jQuery 中存储元素的 ID

javascript - 异步请求后数组中 undefined index

python - Flask - 在请求之间将值存储在内存中

Javascript 确认错误

javascript - 页面重新加载后保留文本框上的值

javascript - Karma 单元测试 EventEmitter 发出和订阅失败,无法读取未定义的属性 'subscribe'

javascript - 将对象列表转换为 json 树结构

php - fullcalendar:无法查看,页面为空

php - 更好地在表单提交按钮上使用jquery?