2015-10-05 42 views
2

我有一個網頁,調用一個AJAX腳本 - ajax.php。我正在使用JQuery發送AJAX請求。php jquery ajax增量輸出

腳本ajax.php通過$_REQUEST收到一些參數,基於它開始其處理。該處理具有涉及多個步驟,並在每一步結束時,我想發送一些反饋回到頁 - 例如:

  • 步驟1完成
  • 步驟2完成
  • ....

一旦所有的步驟都完成 - 腳本ajax.php將輸出這我通過輸出TXT文件:

header('Content-type: text/plain'); 
header('Content-Disposition: attachment; filename="output.txt"'); 

我的問題是:

我有,我想表明,第1步完成用戶的頁面div,第2步完成,如果我使用JQuery.ajax(),將多次調用.done功能?如果不是,最好的處理方法是什麼?我可以在PHP中使用ob_implicit_flush發送'Step x completed'消息嗎?

最後,我將如何處理.txt文件的輸出,以便用戶的瀏覽器下載它?我不想保存在服務器上的文件,然後麻煩的服務器磁盤空間,cron作業的刪除等。

我可以選擇做多個AJAX請求 - 但我不想這樣做會使我的代碼邏輯非常複雜,我將不得不在$_SESSION之間保存大量數據,以便在請求中可見,這又是我不想做的事情。

+0

請檢查該http://stackoverflow.com/questions/6475238/multiple-response-ajax-request – sandeepsure

回答

0

在您的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(); 
       } 
      } 
     }); 
    } 
</script> 
+0

謝謝,但它會導致發送多個結果到服務器。我想我將不得不將功能分解成多個部分... – Ahmad