クライアント側でjqueryを実装したASP.Net Webアプリケーションがあります。 whileループの中で、クライアント側のjqueryスクリプトは、サーバー側のコードでWebメソッドへの非同期呼び出しを行います。この呼び出しは、jqueryがユーザーを更新するために使用する長時間実行されているサーバー側タスクのステータスを返します。目標は、ステータスが完了するまでjqueryがサーバーを繰り返し呼び出すようにすることです。終了すると、whileループから抜け出し、タスクが完了したことをユーザーに通知します。WebメソッドへのAJAX呼び出しの繰り返しの遅延
私の問題は、以下のコードはwhileループで実行されますが、状況要求でサーバーが圧倒されないように、呼び出しごとに遅延またはスリープさせたいと考えています。私は以下のコードでsetTimeoutを呼び出そうとしましたが、最初のajax呼び出しでしか動作しません。それ以降のサーバコールを効率的に遅延させる方法はありますか?これは私が記述しているような種類の行動を達成する最も効率的な方法ですか?理想的には、各呼び出しの間に2〜5秒の遅延が必要です。
Iている次のコード
クライアントのjQuery:
var alertTimerId;
$('input[name=btnStatus]').click(function() {
var result = false;
//Loop while server reports task complete is true
while (!result) {
alertTimerId = setTimeout(function() {
$.ajax({
type: "POST",
url: "Default.aspx/GetStatus",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (msg) {
if(msg.d != false)
result = msg.d;
},
error: function (xhr, ajaxOptions, thrownError) {
alert('AJAX failure');
}
});
}, 2000);
if (count > 0) {
count--;
}
}
});
サーバー側のASP
[System.Web.Services.WebMethod]
public static bool GetStatus()
{
return result;
}
私は 'のsetTimeout(doAjax、2000)を追加します;'エラーハンドラ関数にも、Ajaxのリクエストのtimesoutの1つがリクエストのチェーンが壊れないように。 – shaun5
@ shaun5 - 私はそれが適切であるかどうかは、OPに任されていると思いますが、私は説明でそれを言及しました。 (おそらく警告が出ているので、エラーケースでタイムアウトしても構いません。ユーザーがそれを処理している間に若干の遅れがあります。アラートを再試行するかどうかの確認メッセージに変更する方が良いでしょうまたは中止します。) – nnnnnn
@nnnnnn - これはすばらしいことですが、再帰呼び出しを使用するとは思われませんでした。私の唯一の関心事は、クライアント側のバッファ、またはjQueryがその関数キューを格納するために使用する他のキャッシング・メディア(jQueryがキュー参照を格納する方法を完全には理解していないという私の謝罪)、特に非常に長い処理タスクサーバー側で?これが問題になるのかどうか不思議です。再度、感謝します。 – kingrichard2005