Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据Ajax请求的结果提交(或不提交)表单?_Javascript_Jquery_Ajax_Ruby On Rails 4_Asynchronous - Fatal编程技术网

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。。