2015-10-01 43 views
1

我正在處理Excel數據的頁面。使用Ajax POST返回Jquery/Php處理狀態

目前我有一個索引頁,我曾經通過$ .ajax POST提交JSON數據(文件名,選定的列,工作表,..)到PHP頁面進行處理(迭代每一行的發佈選項)。但我想從處理頁面獲得一些進度響應。因爲現在,它只是在後臺提交併處理所有內容,而不知道它是否完成。

是否有某種方式:

  1. 重定向到處理頁面,用JSON POST數據一起,而不是一個ajax帖子?

OR

  • 回報倍數JSON從一個PHP頁面響應(如啓動,停止,..),並獲取在同一$就成功函數的反應?添加某種檢查功能像
  • IF最後響應線==開工,展現圖像

    ..after一段時間(繼續檢查JSON響應..),

    IF最後響應 - 線==完成,隱藏圖像?

    我無法使用表單提交操作,因爲我發送的是完整的JSON字符串,而不是單獨的輸入值。

    我在這裏忽略了什麼,或者這是不可能的(用我的處理方式)?

    +0

    裝載機的聲音如何? –

    +0

    我想過,但如果它是一個帶有10k記錄的excel文件,很高興看到他現在在哪一行而不是10分鐘加載? –

    回答

    3

    您需要使用ajax調用不同的PHP文件來獲取會話進度。我也這樣做一次,我做了這樣的:

    的Javascript

    function getProgress(){ 
        //console.log("progress called"); 
        $.get("getprogress.php", function(data) { 
         //console.log(data); 
         var p = data.progress; 
    
         if (p!=100){ 
          //set your progressbar here 
         } 
    
        }, "json"); 
    } 
    

    而且在你開始工作的功能,你只需設置一個timeout

    timeout = setInterval('getProgress()', 1000); 
    

    Getprogress。 php

    ob_start(); 
    session_start(); 
    session_write_close(); 
    $output = array(); 
    $output['progress'] = $_SESSION['progress']; 
    echo json_encode($output); 
    

    在你PHP文件,你做實際工作,你需要設置這樣的進展:

    session_start(); 
    $_SESSION['progress'] = $progress; 
    session_write_close(); 
    

    記得使用session_write_close()因爲會議只能在一次一個進程打開。

    +0

    天才!我會看看這個,並給它一個鏡頭!謝謝(可能不是最有效的方式,但嘿..) –

    +0

    沒問題,希望它適合你,我當時搜索了很多,我也相信它不是最有效的方式,但找不到更好的:) –