2

所以,我试图为每个发送的请求设置一个超时,并确定一个请求是否“太长”。我正在查看网络选项卡,每个请求都在 300 毫秒以下,但是“太长”被记录了 6 次!(我发送的请求数)。我在变量、setTimeouts 或其他方面做错了什么吗?

var ajaxMonitor = {};

function timingStart() {
    var url = arguments[2].url;
    ajaxMonitor[url] = {};
    ajaxMonitor[url].timer = setTimeout(function () {
        console.log('too long');
    }, 300);
}

function timingEnd() {
    var url = arguments[2].url;
    clearTimeout(ajaxMonitor[url].timer);
}

$(document).ajaxSend(timingStart);
$(document).ajaxComplete(timingEnd);
4

1 回答 1

0

正如评论中指出的那样,这可能是因为您多次调用同一个网址。如果是这种情况,解决该问题的一种方法是在设置间隔之前清除间隔:

function timingStart() {
  var url = arguments[2].url;
  clear(url);
  ajaxMonitor[url] = {};
  ajaxMonitor[url].timer = setTimeout(function () {
     console.log('too long');
  }, 300);
}

function timingEnd() {
  var url = arguments[2].url;
  clear(url);
}

function clear(url) {
  if(ajaxMonitor[url])
    clearTimeout(ajaxMonitor[url].timer);
}

$(document).ajaxSend(timingStart);
$(document).ajaxComplete(timingEnd);
于 2013-10-24T15:08:45.970 回答