输出异步脚本的状态


Output the Status of an Async Script

我有一个脚本,需要~5分钟才能执行和完成。一切都发生在一个PHP页面上(包括,但没有AJAX或其他任何东西(。脚本完成后,系统会通过电子邮件向您发送一个文件。

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

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

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

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

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

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 .

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

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