2013-02-04 33 views
2

我需要爲長時間運行的PHP腳本創建進度條,因此我決定將腳本進度寫入json文件,然後通過Javascript讀取它。一切工作正常在Firefox中,但如果我改變瀏覽器到Chrome它停止工作。在控制檯窗口中沒有錯誤。 Chrome只是在用戶啓動PHP腳本時停止加載json文件,但它在PHP執行開始之前會讀取該文件。 這是我的代碼或Chrome瀏覽器的正常行爲的問題嗎?Chrome在PHP腳本執行期間停止閱讀JSON文件

PHP:

$fp = fopen($this->writeFile, "w"); 
fwrite($fp, json_encode($values)); 
fclose($fp); 

//for safety we will make a copy and let client access the copy. 
copy($this->writeFile, $this->readFile); 

的Javascript:

getProgress(); 
function getProgress() { 
    $.ajaxSetup({ cache: false }); 
    $.getJSON("../../../../upload/status.json", function(data) { 
    var pbvalue = 0; 
    if(data){ 
     var total = data['total']; 
     var current = data['current']; 
     if(total != 0) 
      pbvalue = Math.floor((current/total) * 100); 
     $(".progress-bar .indicator").width(pbvalue+"%"); 
     $(".progress-text").text(current+"/"+total); 
    } 
    if(pbvalue < 99) 
     setTimeout("getProgress()", 3000); 
}); 
} 

JSON文件:

{"total":"0","current":"0"} 

編輯1: 感謝超時提示,但它是工作(好)的Firefox的問題是沒有「XHR完成加載」respo NSE Chrome的控制檯中後,我開始PHP代碼執行(它加載每3秒爲它應該做的文件之前)

編輯2: 也許這個問題的原因是,我嘗試讀取這個JSON文件用戶提交表單後。我猜想,由於某些原因Chrome提交表單後不再允許執行jQuery $ getJSON函數。任何解決方法將不勝感激。

+3

PHP文件可能超時。嘗試:'set_time_limit(0);' –

+2

只需要注意一點,不要將字符串傳遞給'setTimeout',它會使用'eval'。傳遞函數。 'setTimeout(getProgress,3000);' –

+0

Chrome有問題:http://stackoverflow.com/questions/2541949/problems-with-jquery-getjson-using-local-files-in-chrome – Popnoodles

回答

0

我甚至嘗試製作讀取json文件的Flash動畫,但它也無法正常工作(看起來像在提交Chrome後停止更新當前顯示的頁面)。 對我來說,唯一可行的解​​決方案是通過ajax調用重新設計代碼並執行PHP函數,而不是傳統的表單提交。