2013-10-24 3 views
2

Итак, я пытаюсь установить тайм-аут на каждый запрос, который отправляется и работает, если вы принимаете «слишком длинный». Я смотрю вкладку в сети, и каждый запрос находится в пределах до 300 мс, однако «слишком долго» регистрируется 6 раз! (количество запросов, которые я отправляю). Есть ли что-то, что я делаю неправильно с переменными, setTimeouts или что-то еще?Странное поведение очистки setTimeout с jQuery AJAX

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

Попробуйте ввести URL-адрес с слишком длинным сообщением и функцией 'timingEnd'. Это может дать вам немного больше информации для отладки. –

+0

Есть ли вероятность, что вы делаете запрос AJAX на один и тот же URL более одного раза? Потому что, если вы есть, будет очищен только самый последний 'setTimeout' для этого URL-адреса. – Dan

ответ

0

Как указано в комментарии, это может быть потому, что вы вызываете один и тот же 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); 
Смежные вопросы