3

短くて甘い: PHPファイルを呼び出し、jQueryやAjaxを使用して進行状況を表示する方法を探しています。PHPファイルupgrade.php?step = 1が呼び出され、返された出力が#upgradestatusに追加されます。その後、upgrade.php?step = 2が呼び出され、指定されたステップ数が完了するまでその出力が追加されます。

説明: PHPで実行されるソフトウェアのプラグインを作成しようとしています。このプラグインは、PHPファイルの各ステップを呼び出して、各ファイルなどをアップグレードします。ページをリロードせずに進行状況を表示して、ユーザーに何が行われ、プロセスがどこにあるかを表示できるようにします。

PHPの思考プロセスを使用して、次のようなものを作成したいと思いました。

for (var s=0; s<2; s++){
    $('#upgraderesult').load('upgrade.php', 'step=' + s, function() {
        $('#upgradestatus').append('Upgrade Step ' + s + ' Completed');
    });
}

私は.ajax()も使用しようとしましたが、これらの両方のメソッドを使用すると、非同期であるため、これを理解するのが少し難しいことがすぐにわかりました。

この背後にある私の考えは、あるステップの量だけループするFORループを作成することでした。そのforループは、必要なjQuery / Ajaxコードを生成し、既存のdiv#upgradestatusにステータスメッセージを追加します。#upgraderesultにロードされた結果を追加したかったのですが、簡単にするために、「UpgradeStepXComplete」を追加しました。

だから今私は立ち往生していて、正しいjQuery / Ajaxコードを生成するためにPHPを使用する必要があるかもしれないと思っていますが、これを別の方法で行う方法について他の誰かが意見や提案を持っているかどうかを確認したいと思いました私はこれを完全に間違っていると考えています。

私が望んでいるのは、プロセスのステップに基づいてPHPファイルを呼び出し、ブラウザーでユーザーに進行状況を表示できるようにすることです...これは私が思っていたよりもはるかに難しいことが判明しました。

ご意見、ご提案、ご提案をありがとうございました。

4

3 に答える 3

4

Freenode #jQueryの何人かの人の助けを借りて、皆さんのご意見に感謝します。これは完璧に機能するものを思いつくことができました。

var numSteps = 2;
function loadStepAjax(s) {
    $.ajax('upgrade.php', {
        type: 'GET',
        dataType: 'html',
        data: {
           step: s
        },
        success: function(data) {
            $('#upgradestatus').append(data);
            if (s < numSteps)
                loadStepAjax(s+1);
            }
     });
}

次に、関数を呼び出します。

loadStepAjax(1);

FORループを使用する代わりに、関数loadStepAjaxを作成し、コールバックでIFステートメントを使用して、関数を再度呼び出すかどうかを決定しました。

いつもシンプルなことですね!皆様のご意見ありがとうございました。

于 2012-12-30T00:07:02.807 に答える
0

ajax()を使用するときに実行するコールバックを設定できます(post()がより良い代替手段です)。やってみましたか?ajax()を試したときのコードはまだありますか?

こんな感じになります。

$.post('upgrade.php?step=1', function() {
    $('#upgradestatus').append('Upgrade Step 1 Completed');
    $.post('upgrade.php?step=2', function() {
        $('#upgradestatus').append('Upgrade Step 2 Completed');
        $.post('upgrade.php?step=2', function() {
                $('#upgradestatus').append('All done!'); }
    }
});

もちろん、JSONを返して、「ええ、すべてが機能したかどうか」と言うこともできますが、重要なのは、コールバックを使用して、次のステップの呼び出しが完了するまで待機することです。

于 2012-12-29T23:31:00.577 に答える
0

この問題には別のアプローチがあります。

私はこの質問への答えとして包括的な例を書きました:

ブラウザのタイムアウトなしでPHPで大量のデータを処理する

PS:私の例を拡張して、進行状況ごとにメッセージを渡すこともできます。実際、非常に柔軟です。サーバーで何が起こっているかに応じて、必要なUIの一部のみを更新し、クライアントが不要な処理を行わないようにすることができます。

于 2012-12-29T23:38:57.773 に答える