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

时间:2015-03-12 16:36:37

标签: javascript php jquery ajax laravel

我有ajax请求:

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

和php

.....
return $this->paypalController(params, etc...) // which should redirect to other page
.....

如果成功,我应该如何制作ajax请求,以正常方式提交,因为现在如果我重定向(在PHP)它唯一的返回响应,但我需要这个ajax请求将处理php代码作为正常表单提交(如果成功)

请不要建议“window.location”。

3 个答案:

答案 0 :(得分:2)

我会在表单中添加一个类来测试你的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();
        }
    });
  }
}

答案 1 :(得分:1)

为什么不使用在成功的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>

答案 2 :(得分:0)

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

只有在将form.submit()放在setTimeout后面时才以编程方式提交它。 500毫秒似乎已经为我做了伎俩。我不确定为什么浏览器在尝试以传统方式提交表单时无法以编程方式提交表单,但这似乎可以解决这个问题。

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

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