2012-05-14 39 views
0

我有一個腳本,需要大約5分鐘才能執行並完成。一切都發生在一個PHP頁面(包括,但沒有AJAX或任何東西)。腳本完成後,您會通過電子郵件發送文件。輸出異步腳本的狀態

我希望前端只需接受表單提交併在幕後做這件事,同時通過推送信息,如果窗口保持打開狀態。

所以,舉例來說,這裏將是流量:

  1. 填寫表格並提交。
  2. 確認表單已提交 - 可自由關閉窗口。
  3. 如果窗口仍然開放,給「里程碑」更新
    1. 查詢完成
    2. 文件生成
    3. 電子郵件發送

我們的目標是提供在用戶等待信息爲它,但窗體提交後立即關閉窗口是完全可以接受的,並且電子郵件仍然會被接收。我知道我可以通過AJAX提交表單,但我怎樣才能回傳臨時流程完成,而不僅僅是成功回調?

+0

我有一個類似的系統使用coldfusion和cfflush與iframe實現。當每個里程碑完成後,我會向iframe提供一個腳本標記,用於向父頁面發送一些內容以指示進度。 –

回答

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

0

您應該將服務器端邏輯分隔成可以從命令行運行的腳本。假設您在Linux上,您將使用php exec()函數在您的服務器上啓動一個後臺進程,該進程使用php命令行程序運行腳本。

然後,您將瀏覽器代碼定期輪詢服務器以獲取更新。