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的情况下发送表单时的Ajax错误_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 在没有Ajax的情况下发送表单时的Ajax错误

Javascript 在没有Ajax的情况下发送表单时的Ajax错误,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有以下代码: $("#contactform").validate({ rules: { // ... }, submitHandler: function(form) { var postData = $(form).serializeArray(); var formURL = $(form).attr("action"); $.ajax({ url : formU

我有以下代码:

$("#contactform").validate({
    rules: {
       // ...
    },
    submitHandler: function(form) {
        var postData = $(form).serializeArray();
        var formURL = $(form).attr("action");
        $.ajax({
                    url : formURL+'validate',
                    type: "POST",
                    data : postData,
                    success: function(data, textStatus, jqXHR)
                    {

                            $.ajax({
                                url : formURL,
                                type: "POST",
                                data : postData,
                                beforeSend: function (){
                                   // ...
                                },

                                success:function(data, textStatus, jqXHR)
                                {
                                   // ...
                                },
                                error: function(jqXHR, exception)
                                {
                                    $(form).submit();
                                },
                                complete: function (){
                                  // ...
                                }
                            });
                    },
                    error: function(jqXHR, exception)
                    {
                        $(form).submit();
                    }

                });
    }
});
在两个地方我有
$(表单).submit()-我希望在这里不使用AJAX发送表单(提交后的url应更改为表单的one-in-action属性)

目前,数据似乎是使用AJAX发送的—当我添加警报以发送
$(form).submit()时警报一个接一个地显示(我准备了PHP脚本以返回不正确的数据)

*编辑*

更改后我的代码是:

我的表格开始了

<form method="post" action="{{ current_url }}" id="contactform" onsubmit="return formAjaxSubmit(this);">

一切似乎都很正常。

我的假设是,由于提交处理程序已经附加,所以当您进行另一次提交时,它会再次调用提交处理程序

不要尝试提交同一表单,而尝试使用操作url和序列化数据从当前表单生成另一个表单到另一个表单

请查找以下提交数据的解决方案
1.删除提交处理程序,然后调用submit()。页面将刷新并再次附加提交处理程序。

2.使用一个变量来存储错误标志(我不建议这样做,但仍然是一种方法)。并在发送AJAX请求之前在提交处理程序中使用此标志。

我建议的解决方案是

<form action="nonAjaxSubmitHandler.php" onsubmit="return tryAjaxSubmit();">
...
</form>


function tryAjaxSubmit() { 
  // Ajax code - on success
  return false; // stops form submitting via http post

  // On error
  return true;  // form will submit via http post
}

你的表格代码在哪里?我怀疑它进入了一个循环:您提交(submitHandler通过ajax发送),OneError-form重新提交(submitHandler通过ajax发送,错误再次发生,OneError-form重新提交(submitHandler通过ajax发送)所以我的表单是标准的HTML表单,没有什么特别的。我知道在这种情况下它是通过AJAX发送的,所以我想问,如果不使用AJAX,是否可以错误地重新发送表单。对于标准AJAX错误(加载页面内容)如果没有表单,我可以简单地使用
window.location.href=url;
重新加载不使用ajax的页面。请参阅下面的答案中的我的解决方案。它会尝试进行ajax提交,如果ajax失败,请返回true,通过传统方法强制表单提交jQuery ajax回调不会干扰事件处理程序。处理程序继续执行即使AJAX请求仍在运行,它也会退出。@ElmoVanKielmo-可以。在tryAjaxSubmit返回之前,表单不会提交。如果使用jquerys“async:false”将AJAX回调设置为同步,则表单不会返回任何内容 option@Husman这似乎是我需要的东西,但我必须以某种方式划分我的验证方法,以便在onsubmit启动时进行验证,而不必提交和发送。我稍后会尝试today@Husman我已经在我的问题中添加了编辑。目前我不知道如何才能让这两件事起作用——jQuery验证和作为des处理错误抄袭beginning@Husman我试过了,但在本例中,验证不是“实时”进行的,而是在单击提交后进行的
formAjaxSubmit(form);
<form action="nonAjaxSubmitHandler.php" onsubmit="return tryAjaxSubmit();">
...
</form>


function tryAjaxSubmit() { 
  // Ajax code - on success
  return false; // stops form submitting via http post

  // On error
  return true;  // form will submit via http post
}
<form method="post" action="{{ current_url }}" id="contactform" onsubmit="return formAjaxSubmit(this);">

<script>
function formAjaxSubmit(form) {
  // Do validation
  $("#contactform").validate({
    rules: {
      //....
    },
    submitHandler: function(form) {
      // When form is validated, submit via ajax
      var postData = $(form).serializeArray();
      var formURL = $(form).attr("action");
      $.ajax({
        url : formURL+'validate',
        type: "POST",
        data : postData,
        success: function(data, textStatus, jqXHR){
          ...
          return false
        },
        error: function(jqXHR, exception)
        {
          return true;
        }
      });
  });
}
</script>