新手 - 奎斯顿 -
试图解决的问题:如果某些打开的连接没有被XMLHttprequest关闭,我们想要中止它们。
在javascript文件中,有Ajax调用,我需要为每个调用启动一个计时器,并在成功和失败回调中清除计时器。想要确保 - 如果计时器触发,则表示请求未返回,因此应该中止。对于暂时中止的情况,请求可能会回来 - 想要丢弃它们。想要在处理之前添加一个检查成功和失败回调的标志,并进行适当的处理。
想要添加这样的计时器:
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
}
}
});
}
非常感谢任何帮助。
答案 0 :(得分:3)
没有必要自己实现逻辑,并且jquery提供了timeout选项,查看jQuery.ajax()的文档,有一个名为timeout
的选项。
例如:
$.ajax({
url: '',
type: '',
data: '',
timeout: 30000, //time in milliseconds - 30000 equals 30 seconds,
......
})