Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jqueryajax的奇怪setTimeout清除行为_Javascript_Jquery - Fatal编程技术网

Javascript jqueryajax的奇怪setTimeout清除行为

Javascript jqueryajax的奇怪setTimeout清除行为,javascript,jquery,Javascript,Jquery,所以,我试图在发送的每个请求上设置一个超时,并确定一个请求是否花费了“太长时间”。我正在查看网络选项卡,每个请求都在300ms以下,但是“太长”会被记录6次!(我发送的请求数)。我在变量、设置超时或其他方面有什么问题吗 var ajaxMonitor = {}; function timingStart() { var url = arguments[2].url; ajaxMonitor[url] = {}; ajaxMonitor[url].timer = setT

所以,我试图在发送的每个请求上设置一个超时,并确定一个请求是否花费了“太长时间”。我正在查看网络选项卡,每个请求都在300ms以下,但是“太长”会被记录6次!(我发送的请求数)。我在变量、设置超时或其他方面有什么问题吗

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);

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

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);

尝试使用“过长”消息和
timingEnd
功能记录url。这可能会为您提供更多的调试信息。您是否有可能多次对同一URL执行AJAX请求?因为如果是,则只有该URL最近的
setTimeout
才会被清除。