【问题标题】:Submit form with ajax but redirect to another page使用 ajax 提交表单但重定向到另一个页面
【发布时间】:2012-02-04 19:26:45
【问题描述】:

如果我想在表单提交时(a)执行某个 php 文件(url-a),我应该在 html 和 jquery 中使用什么; (b) 重定向到另一个。(url-b)

我目前实现了 jquery 表单插件。 http://jquery.malsup.com/form/#getting-started

像这样:

步骤a。包括 jquery 和表单插件脚本;

步骤 b。在 html 中,在表单元素中:

      <form action="url-a.php">
          <!--form code inserted here including input elements, etc and submit-->
      </form>

步骤c。在 js 里面,document ready:

      $('#form').ajaxForm(function() { 
           $.post("url-a.php", {a: a, b: b});
      }); 

是否应该更改这些 url 链接之一?假设 url-a 是 ajax 应该处理的,我想重定向到 url-b ..

谢谢!

【问题讨论】:

    标签: javascript jquery jquery-plugins


    【解决方案1】:
    $('#form').ajaxForm(function() { 
      $.post("url-a.php", {a: a, b: b});
      window.location.href="/url-b.php";
    });
    

    【讨论】:

      【解决方案2】:

      如果您希望页面重定向,那么您为什么希望它提交ajaxly 任何在成功处理程序中您可以重定向到页面的方式

       $.post("url-a.php", {a: a, b: b},function(){
         window.location.href="/page/to/redirect.php";
       });
      

      【讨论】:

      • 因为这是我的应用所需要的,所以我需要在 ajax 返回之前进行重定向。所以这个解决方案不起作用。 (ajax预计不止几秒)
      • 为什么要重定向然后提交表单,因为您必须序列化表单并将其带到下一页然后提交,但这不是这样做的方法,如果由于多种原因,表单提交失败
      • 我不一定要先重定向或先提交,它们对我来说都是一样的,关键是我不想等待提交的ajax的成功功能。这是因为 php 文件对提交结果所做的事情非常复杂,可能需要几分钟到几个小时。所以我希望用户不要为此烦恼。他确实提交了,他去了别的地方,无论这个 php 页面在后台做什么,都不应该在当前浏览器的关注中。
      • 好的,我会尝试第二种方法。那么我该怎么做呢?使用serialize?
      【解决方案3】:

      $.post(..) 的“完成”功能中,您应该更改浏览器的位置。您不能将服务器端重定向与 ajax 一起使用。

       $.post("url-a.php", {a: a, b: b},function(){
            window.location.href="/url-b.php";
       });
      

      如果您想在 ajax 完成之前重定向,这是可能的,但很难。例如,我不知道如何在 PHP 中做到这一点。问题是,如果您立即重定向(再次应该通过 javascript 完成),那么请求就会从客户端中止。如果请求被中止,服务器也会中止它。有时可以在服务器上启动一个与请求线程分开的新线程,但如果请求在完全到达服务器之前被中止,则一切都会失败。

      一般来说,您不应该这样做 - 这是一种错误的方法。要么不重定向,要么不在前一页启动 ajax 请求 - 在新页面加载后立即启动它。

      更新:我看到您的 ajax 请求需要运行一个小时 - 这不会发生 - 浏览器将超时。在您确认确实需要一小时后,check this 用于异步 php 任务。可以从第2页的$(document).ready(function() {..});开始

      【讨论】:

      • 我希望重定向立即发生,并且 ajax 继续运行并做一段时间......
      • 好的,我正在尝试您提到的最后一种方法 - 在新页面加载后立即启动 ajax。但它不起作用......我应该把jqury post放在哪里?根据什么?只是加载文档?我应该如何传递变量?我使用了 post,然后再次将它们传递给 js,但这似乎是多余的......谢谢!
      • 我提出了一个新问题 - 请参阅此处:stackoverflow.com/questions/8775868/…
      猜你喜欢
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 2013-07-18
      • 2013-06-14
      • 2012-12-08
      • 1970-01-01
      相关资源
      最近更新 更多