输出异步脚本的状态

时间:2012-05-14 19:50:00

标签: php javascript jquery ajax

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

我希望前端能够简单地接受表单提交并在幕后执行操作,同时通过推送信息,如果窗口仍然打开。

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

  1. 填写表格并提交。
  2. 页面确认表格已提交 - 免费关闭窗口。
  3. 如果窗口仍然打开,请提供“里程碑”更新
    1. 查询完成
    2. 生成文件
    3. 已发送电子邮件
  4. 目标是在用户等待时提供信息,但在表单提交后立即关闭窗口是完全可以接受的,并且仍然会收到电子邮件。我知道我可以通过AJAX提交表单,但是如何才能传回临时进程完成而不仅仅是成功回调?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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