Javascript 如何根据Ajax请求的结果提交(或不提交)表单?
我在我的网站上有一个表单,用户可以在其中提交内容并获得结果Javascript 如何根据Ajax请求的结果提交(或不提交)表单?,javascript,jquery,ajax,ruby-on-rails-4,asynchronous,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> 这很好,但现在我想尝试通过另
<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>
这很好,但现在我想尝试通过另一个ajax请求获得结果,如果失败,只提交到我的常规后端。单击按钮后,我调用以下代码:
$.post("http://example.com/submit-stuff", json, function(data) {
//do stuff with data
});
但是,它是异步的(因此我无法从中返回结果),因此即使其他ajax尝试失败,代码也会达到returnfalse
我应该如何修复此问题,使其仅在ajax尝试失败时提交到我自己的后端?
我可以将$.post更改为$.ajax并使其同步,但通常不建议这样做。或者,我可以在
$.post
回调中提交表单,但是如何从那里提交整个表单?如果出现错误或不起作用,它还会提交吗?您的提交处理程序应该始终阻止表单提交
然后,如果Ajax代码返回OK,则应调用表单的submit()
方法。这将绕过提交处理程序并提交表单
注意:对DOM对象而不是jQuery对象调用
submit
。jQuery有从包装器触发事件处理程序的习惯。您的提交处理程序应该始终阻止表单提交
然后,如果Ajax代码返回OK,则应调用表单的submit()
方法。这将绕过提交处理程序并提交表单
注意:对DOM对象而不是jQuery对象调用
submit
。jQuery有从包装器触发事件处理程序的习惯。您可以在submit函数中绑定ajax请求,并在必要时调用.post()
事件:
$("form").submit(function(e){
e.preventDefault(); // <-prevents normal submit behaviour
//only post if your ajax request goes your way
$.ajax(url,function(data){
//argument to post or not
if(data=="success"){ postForm(); }
});
});
function postForm(){
$.post(
"/submit-stuff"
,$( "form" ).serialize()
,function(data){
//your code after the post
});
}
$(“表格”)。提交(功能(e){
e、 preventDefault();//您可以在submit函数中绑定ajax请求,并在必要时调用.post()
事件:
$("form").submit(function(e){
e.preventDefault(); // <-prevents normal submit behaviour
//only post if your ajax request goes your way
$.ajax(url,function(data){
//argument to post or not
if(data=="success"){ postForm(); }
});
});
function postForm(){
$.post(
"/submit-stuff"
,$( "form" ).serialize()
,function(data){
//your code after the post
});
}
$(“表格”)。提交(功能(e){
e、 preventDefault();//回调:将其设置为同步请求,或者让.post回调处理程序调用“可以继续”代码的其余部分,而不是在执行#submit按钮时陷入其中。回调:将其设置为同步请求,或者让.post回调处理程序调用“可以继续”代码的其余部分编写代码,而不是在执行“提交”按钮时陷入其中。我是否需要创建一个自定义的postForm()
函数,而不是只调用submit()
在表单上?如果您不想为postForm创建单独的函数,那么您可以将它放在当前调用它的包装器中。我没有否决它,也没有否决回答我问题的人。我需要创建自定义的postForm()
函数而不是只调用submit()
在表单上?如果你不想为你的postForm创建一个单独的函数,那么你可以把它放在当前调用它的包装器中。我没有否决它,也没有否决回答我问题的人。我可以在$.post ajax中调用submit
,它可以工作。但是如果失败了,那么整个$.post
调用导致错误?如何调用submit()那么?如果Ajax调用返回的数据显示为OK,或者如果Ajax调用出错,那么您希望提交表单,但如果Ajax调用返回的数据显示为not OK,则不希望提交表单?使用.Ajax
而不是.post
并具有错误处理功能。我只希望在出现错误或Ajax调用出错时提交到自己的后端ys它不起作用。所以我想我终究还是在使用.ajax。我可以从$.post ajax中调用submit
,它可以工作。但是如果关闭了,那么整个$.post
调用会导致错误?我如何调用submit()那么?如果Ajax调用返回的数据显示为OK,或者如果Ajax调用出错,那么您希望提交表单,但如果Ajax调用返回的数据显示为not OK,则不希望提交表单?使用.Ajax
而不是.post
并具有错误处理功能。我只希望在出现错误或Ajax调用出错时提交到自己的后端它不起作用。所以我想我还是坚持使用.ajax。。