2

長時間実行するPHPスクリプトのプログレスバーを作成する必要があるため、スクリプトの進行状況をjsonファイルに書き込んでから、Javascriptで読み取ることにしました。Firefoxではすべて正常に動作しますが、ブラウザをChromeに変更すると動作しなくなります。コンソールウィンドウにエラーはありません。Chromeは、ユーザーがPHPスクリプトを開始すると、jsonファイルの読み込みを停止しますが、PHPの実行が開始される前にこのファイルを読み取ります。コードに問題がありますか、それともChromeブラウザの通常の動作に問題がありますか?

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では(良好に)機能しています。問題は、PHPの実行を開始した後(3秒ごとにファイルをロードする前)にChromeコンソール内に「XHRのロードが完了しました」という応答がないことです。

編集2: おそらくこの問題の理由は、ユーザーがフォームを送信した後にこのJSONファイルを読み込もうとしたためです。何らかの理由で、フォーム送信後のChromeではjQuery$getJSON関数を実行できなくなったと思います。任意の回避策をいただければ幸いです。

4

1 に答える 1

0

jsonファイルを読み取るフラッシュアニメーションを作成しようとしましたが、どちらも機能しませんでした(送信後、Chromeが現在表示されているページの更新を停止したようです)。私にとって有効な唯一の解決策は、コードを再設計し、従来のフォーム送信の代わりに ajax 呼び出しによって PHP 関数を実行することでした。

于 2013-02-14T16:52:11.730 に答える