Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.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_Php_Jquery_Ajax_Laravel - Fatal编程技术网

Javascript Ajax请求后,以正常方式提交表单

Javascript Ajax请求后,以正常方式提交表单,javascript,php,jquery,ajax,laravel,Javascript,Php,Jquery,Ajax,Laravel,我有一个请求: <script> $("#abc_form_submit").click(function(e) { e.preventDefault(); //........ $.ajax({ type: "POST", url: url, dataType: 'json', data: $("#

我有一个请求:

<script>
        $("#abc_form_submit").click(function(e) {
        e.preventDefault();

        //........
        $.ajax({
               type: "POST",
               url: url,
               dataType: 'json',
               data: $("#abc_form").serialize(), // serializes the form's elements.
               success: function(data)
               {
                    if(data.success == 'false') {
// show errors
                    } else {
                        // SUBMIT NORMAL WAY. $("#abc_from").submit() doesnt work.
                    }
               }
             });

        return false; // avoid to execute the actual submit of the form.
    });
    </script>
如果ajax请求成功,我应该如何以正常方式提交表单,因为现在如果我重定向(在PHP)它的唯一返回响应,但我需要这个ajax请求将PHP代码处理为正常表单提交(如果成功)


请不要建议使用“window.location”。

我以前遇到过这个问题,我需要将表单提交到两个地方,一个用于跟踪,另一个用于实际表单操作

只有在将表单.submit()置于setTimeout之后时,才能通过编程方式提交它。500米似乎对我起了作用。我不知道为什么浏览器在传统上试图提交表单时会遇到编程提交表单的问题,但这似乎解决了问题

setTimeout(function(){ $("#abc_from").submit(); }, 500);

但有一件事要记住,一旦它提交,那就是它的页面,它就消失了。如果您仍然希望运行页面上正在运行的任何进程,则需要将表单的目标设置为“空白”,以便它在新选项卡中提交。

我将向表单添加一个类,以测试是否已经发生ajax。如果有,请使用普通的单击功能

比如:

$('form .submit').click(function(e) {
  if (!$('form').hasClass('validated'))
  {
    e.preventDefault();
    //Your code here
    $.post(url, values, function(data) {
        if (success)
        {
          $('form').addClass('validated');
          $('form .submit').click();
        }
    });
  }
}

为什么不使用在成功的AJAX请求后更新的结果变量呢

<script>
    $("#abc_form_submit").click(function(e) {
    e.preventDefault();
    // avoid to execute the actual submit of the form if not succeded
    var result = false;
    //........
    $.ajax({
           type: "POST",
           url: url,
           dataType: 'json',
           async: false,
           data: $("#abc_form").serialize(), // serializes the form's elements.
           success: function(data)
           {
                if(data.success == 'false') {
                    // show errors
                } else {
                    // SUBMIT NORMAL WAY. $("#abc_from").submit() doesnt work.
                    result = true;
                }
           }
         });

    return result; 
});
</script>

$(“#abc#表格#提交”)。单击(功能(e){
e、 预防默认值();
//如果未成功,请避免执行表单的实际提交
var结果=假;
//........
$.ajax({
类型:“POST”,
url:url,
数据类型:“json”,
async:false,
数据:$(“#abc_表单”).serialize(),//序列化表单的元素。
成功:功能(数据)
{
如果(data.success==“false”){
//显示错误
}否则{
//以正常方式提交。$(“#abc_from”).SUBMIT()不起作用。
结果=真;
}
}
});
返回结果;
});

为什么要提交两次表格?如果你打算以“正常方式”提交表单,那么首先就不用担心AJAX。当你说
$(“#abc_from”).submit()不起作用时,有什么不起作用,因为这是一种方法?你收到错误了吗?@David,因为它处于模态,我需要在不重新加载的情况下显示错误,但如果它通过,那么我需要正常way@EimantasGabrielius:如果“通过”,那么表单已经提交,那么为什么还要再次提交?那种设计毫无意义。通常,当通过AJAX提交表单时,对于成功或失败都会有一些有意义的响应。如果出现故障,则显示错误。(你正在做的)在成功的情况下,对成功做出反应。可能会对UI进行更改,可能会将用户发送到另一个页面,等等。听起来好像您想将用户发送到另一个页面。好的,但是如果我改变class=validated(例如使用firebug),那么我就可以“破解”这个。这意味着我需要在php中验证表单2次。没有其他方法?@EimantasGabrielius这是非常正确的,但这在任何javascript实现中都是可能的。无论你的javascript做什么,用户都有可能破解它。用户可以访问页面上的所有js、css和html。大多数验证和提交都是在同一个调用上进行的,以防止发生此类事情。如果验证失败,请使用表单值重新加载页面。如果成功,那么提交。如果要在不加载页面的情况下进行验证,则无论选择哪种解决方案,在提交数据时都必须再次进行验证。用户可以编辑您的js以跳过任何一种方式的验证。@EimantasGabrielius如果这确实是为了验证,大多数实现都会对UX进行javascript验证,然后在提交时进行适当的php验证以确保安全性。我已经在服务器端进行了验证,我只需要提交相同的表单,但不是ajax方式。@EimantasGabrielius如果您在验证和提交之间返回页面,则必须再次验证,否则您将有一个巨大的安全漏洞。在这个话题上没什么可说的了。也许更好地解释一下为什么要在两个不同的调用中而不是一个调用中进行验证和提交会有所帮助。如果我把console.log(“debug”)放在else{…}语句中,它会打印出来,但“result”并没有变为true…我的错误。结果不会更改,因为您正在执行异步AJAX调用,所以单击函数在AJAX调用完成之前返回…我可以做什么/更改?您正在尝试异步验证表单。。。只是将代码更改为同步执行。它对我说:“主线程上的同步XMLHttpRequest已被弃用,因为它会对最终用户的体验造成有害影响。要获得更多帮助”,并且不起作用。不过,我将其添加到$(“#abc_form”).submit()事件中。点击有关系吗?
<script>
    $("#abc_form_submit").click(function(e) {
    e.preventDefault();
    // avoid to execute the actual submit of the form if not succeded
    var result = false;
    //........
    $.ajax({
           type: "POST",
           url: url,
           dataType: 'json',
           async: false,
           data: $("#abc_form").serialize(), // serializes the form's elements.
           success: function(data)
           {
                if(data.success == 'false') {
                    // show errors
                } else {
                    // SUBMIT NORMAL WAY. $("#abc_from").submit() doesnt work.
                    result = true;
                }
           }
         });

    return result; 
});
</script>