初心者 - 質問 -
解決しようとしている問題: XMLHttprequest によって閉じられていない開いている接続がある場合、それらを中止したいと考えています。
Ajax 呼び出しがある JavaScript ファイルでは、呼び出しごとにタイマーを開始し、成功コールバックと失敗コールバックの両方でタイマーをクリアする必要があります。確認したい-タイマーが起動した場合、リクエストが返されなかったことを意味するため、中止する必要があります。アボートにもかかわらず、リクエストが戻ってくる可能性がある場合は、それらを破棄します。処理の前に成功と失敗のコールバックをチェックし、適切に処理するフラグを追加したい。
このようなタイマーを追加したい:
var timer = setTimeout(function() { // Start a timer. If triggered,
timedout = true; // set a flag and then
request.abort(); // abort the request.
},
timeout); // time specified
しかし、以下のような既存のコードでは、タイマーを開始して中止する場所を理解するのが難しいと感じています。
this.ajaxCall = function(urlSuffix, type, data, successCallback, errorCallback, callbackParam, logFlag)
{
if (!successCallback) {
throw "A successCallback must be supplied";
}
if (!errorCallback) {
throw "An errorCallback must be supplied";
}
var st = 0;
if (logFlag !== false)
st = LogMessageTestCL(urlSuffix + " - start: " + type, -1);
$.ajax({
url: urlRoot + urlSuffix,
type: type,
data: data,
cache: false,
success: function(msg) {
try {
if (logFlag !== false)
LogMessageTestCL(urlSuffix + " - end: " + type, st);
successCallback(msg, callbackParam);
}
catch (e) {
// this will only fail when the calling page is unloaded before the call returns, so no need to log this
}
},
error: function(xhr,status) {
try {
if (logFlag !== false)
LogMessageTestCL(urlSuffix + " - error end: " + type, st);
if (status === "timeout") {
alert("30 sec time out");
LogMessageTestCL("callback timed out");
return;
}
else if (status === "error") {
if (xhr.status != 200) {
errorCallback(xhr, callbackParam);
}
}
else
errorCallback(xhr, callbackParam);
}
catch (e) {
// this will only fail when the calling page is unloaded before the call returns, so no need to log this
}
}
});
}
どんな助けでも大歓迎です。