【发布时间】:2014-10-18 19:16:22
【问题描述】:
我的网站上有一个表单,用户可以在其中提交内容并获得结果
<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 中return 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 不起作用,它还会提交吗?
【问题讨论】:
-
使它成为一个同步请求,或者让您的 .post 回调处理程序调用其余的“可以继续”代码,而不是在您执行 #submit-button 操作时陷入其中。
标签: javascript jquery ajax ruby-on-rails-4 asynchronous