実行に時間がかかる PHP プロセスがあります。それを呼び出すAJAXプロセスが終了するのを待つ必要はありません。PHP プロセスが終了すると、データベースにフィールドが設定されます。データベースフィールドを定期的にチェックしてメッセージを設定するには、ある種の AJAX ポーリング呼び出しが必要です。
待機するのではなく、ポーリングするように jQuery AJAX 呼び出しを設定するにはどうすればよいですか? PHP スクリプトは何か特別なことをする必要がありますか?
実行に時間がかかる PHP プロセスがあります。それを呼び出すAJAXプロセスが終了するのを待つ必要はありません。PHP プロセスが終了すると、データベースにフィールドが設定されます。データベースフィールドを定期的にチェックしてメッセージを設定するには、ある種の AJAX ポーリング呼び出しが必要です。
待機するのではなく、ポーリングするように jQuery AJAX 呼び出しを設定するにはどうすればよいですか? PHP スクリプトは何か特別なことをする必要がありますか?
サーバー側のアクションを実行する方が簡単です。値が準備できるまで否定応答で応答し、肯定応答を受信するか、一定数の失敗が発生するまで (setTimeout() を使用して) 繰り返しポーリングするようにクライアント側を設定します。観察した。
var timer;
var count = 0;
function poll(url) {
timer = setTimeout(function() {
$.ajax({
url: url,
success: function(data) {
if (data.Status) {
...do something...
}
else {
if (++count > 10) {
...failure action...
}
else {
poll(url);
}
}
...other options...
})
},5000)
}
次に、サーバー側で(疑似コード)を行うものを使用します...
if operation is not complete
return serialize( { Status : false } )
else
data = ....
data.Status = true
return serialize(data)
end
ステップ 1:長期実行プロセスへの最初の呼び出し - ignore_user_abort(true); を設定します。長い時間がかかり、接続を閉じるPHPスクリプトで。
ステップ 2:提案された方法を使用して DB フィールドが更新されているかどうかを確認します。
AJAX の comm メソッドを介して直接 DB にアクセスすることはお勧めできないため、簡単な回避策の 1 つは、呼び出し可能な別の PHP スクリプトを作成して、それをチェックすることです。
SetInterval('yourfunctionname',100)
、ポーリング スクリプトを呼び出せるようにします。(長いポーリングとは対照的に)通常のポーリングを意味しますか?はいの場合、これが役立つかもしれません: http://jquery-howto.blogspot.com/2009/04/ajax-update-content-every-x-seconds.html
PHP スクリプトは、データベース フィールドをチェックするだけで、すぐに true/false を返します。