0

我有一个需要约 5 分钟才能执行和完成的脚本。一切都发生在一个 PHP 页面上(包括但不包括 AJAX 或任何东西)。脚本完成后,您会收到一个文件的电子邮件。

我想要的是前端简单地接受表单提交并在幕后做这件事,同时在窗口保持打开时推送信息

因此,例如,这将是流程:

  1. 填写表格并提交。
  2. 页面确认表单已提交 - 免费关闭窗口。
  3. 如果窗口保持打开状态,请提供“里程碑”更新
    1. 查询完成
    2. 文件生成
    3. 邮件已发送

目标是在用户等待时提供信息,但在表单提交后立即关闭窗口是完全可以接受的,并且仍然会收到电子邮件。我知道我可以通过 AJAX 提交表单,但我如何才能传回临时流程完成而不仅仅是成功回调?

4

2 回答 2

1

您必须让客户端(浏览器)定期轮询服务器以获取更新。例如,您可能有以下内容:

function checkStatus() {
    $.ajax( {
        url: "/CheckStatus",  // your AJAX handler, on the server
        success: function(data) {
            $('#status').text( data );
            if( data != 'Email sent' )
                setTimeout( checkStatus(), 100 );
        }
    } );
}

然后,提交表单后,只需调用checkStatus.

于 2012-05-14T19:59:14.740 回答
0

您应该将服务器端逻辑分离到可以从命令行运行的脚本中。假设您在 Linux 上,您将使用 php exec() 函数在您的服务器上启动一个后台进程,该进程使用 php 命令行程序运行您的脚本。

然后,您将让您的浏览器代码定期轮询服务器以获取更新。

于 2012-05-15T09:29:23.597 回答