2013-01-22 37 views
3

我對運行相當長時間(1秒到3分鐘之間)的PHP腳本執行jQuery Ajax調用。它不斷在數據庫中記錄完成百分比。我怎樣才能不斷地運行另一個Ajax請求來向用戶報告從MySQL數據庫中完成的百分比?使用Ajax顯示由另一個Ajax請求調用的PHP腳本的進度

編輯 我知道如何使用一個單獨的PHP腳本來查詢數據庫,所以我的問題是更多的如何設置的JavaScript和Ajax調用

+0

你可能會考慮[Gearman的(http://php.net/manual/en/gearman.examples- reverse-bg.php)作爲後臺進程的替代方案。它還提供了一個工作進度界面,所以你不需要這個MySQL數據庫:[GearmanJob :: sendStatus()](http://php.net/manual/en/gearmanjob.sendstatus.php)和[ GearmanClient :: jobStatus()](http://php.net/manual/en/gearmanclient.jobstatus.php) –

回答

6

後您的AJAX調用脫掉你的過程,你可以讓另一AJAX調用在一個循環請求,退貨,並呈現當前完成百分比,直至達到100%。基本上,一個AJAX調用來啓動該進程,然後進行一系列檢查狀態的調用。

更新:下面是一些簡單的JavaScript來實現你想要的:

<script> 
function startProcess() { 
    //start your long-running process 
    $.ajax(
      { 
       type: 'GET', 
       url: "/longRunningProcess", 
       async: true, 
       success: 
        function (data) { 
         //do something - your long process is finished 
        } 
      }); 
} 
function getStatus() { 
    //check your progress 
    $.ajax(
      { 
       type: 'GET', 
       url: "/checkProgress", 
       async: true, 
       success: 
        function (data) { 
         //assume the data returned in the percentage complete 
         var percentage = parseInt(data); 

         //write your status somewhere, like a jQuery progress bar? 

         if (percentage < 100) { 
          //if not complete, check again 
          getStatus(); 
         } 
        } 
      }); 
} 

+0

這是什麼樣的循環?它會在Ajax循環(調用正在監控的PHP腳本)中的一個while循環(繼續運行進度調用運行)中發生Ajax循環(進度調用)嗎? – user1114864

+0

我已經添加了一些示例代碼來向你展示我的意思。基本上,通過Ajax啓動進程,檢查來自另一個Ajax調用的狀態,並保持調用,直到狀態完成。 –

+0

除非我誤會,否則這將不會與會話一起工作,因爲第二個PHP腳本將無法打開會話......所以您的檢查進度應該具有檢查狀態而不打開會話的所有需求。 – Salketer

0

你可能會需要另一個URL來調用該民意調查從數據庫中取得進展。 換句話說,一個不同的PHP腳本報告進度。 Ajax調用可能會使用超時或jQuery必須定期調度自己的任何花哨的東西(直到服務器調用報告完成)。

記住要處理特殊情況下的服務器端處理死亡(因而無法完成!)

+1

嗯,現在想想,你可能想使用exec來運行實際的長時間運行的進程,並立即返回結果第一次阿賈克斯呼叫。請記住,您的瀏覽器可能會限制優秀的Ajax調用到同一個域到兩個... – demaniak