適切な時間(1秒から3分の間)実行されるPHPスクリプトに対してjQueryAjax呼び出しを行います。完了率をデータベースに常に記録します。同時に別のAjaxリクエストを継続的に実行して、MySQLデータベースからの完了率をユーザーに報告するにはどうすればよいですか?
編集 別のPHPスクリプトを使用してデータベースにクエリを実行する方法を理解しているので、私の質問はJavaScriptとAjaxの呼び出しを設定する方法です。
適切な時間(1秒から3分の間)実行されるPHPスクリプトに対してjQueryAjax呼び出しを行います。完了率をデータベースに常に記録します。同時に別のAjaxリクエストを継続的に実行して、MySQLデータベースからの完了率をユーザーに報告するにはどうすればよいですか?
編集 別のPHPスクリプトを使用してデータベースにクエリを実行する方法を理解しているので、私の質問はJavaScriptとAjaxの呼び出しを設定する方法です。
プロセスを開始するためのAJAX呼び出しの後、ループ内で別のAJAX呼び出しを行うことができます。この呼び出しは、100%に達するまで、現在の完了率を要求、返し、提示します。基本的に、プロセスを開始するための1つの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();
}
}
});
}
データベースからの進行状況をポーリングする呼び出しには、おそらく別のURLが必要になります。つまり、進行状況を報告する別のPHPスクリプトです。Ajax呼び出しは、おそらくタイムアウトまたはjQueryが定期的に(サーバー呼び出しが完了を報告するまで)それ自体をスケジュールしなければならない特別なものを使用します。
サーバー側の処理が停止する(したがって完了しない)例外的なケースを処理することを忘れないでください。