Отключите кэширование и посмотрите, решит ли это вашу проблему:
function longPollRequest () {
$.ajax({
url : '/test-path',
type : 'GET',
cache : false,
success : function(data, textStatus, jqXHR) {
longPollRequest();
console.log('Received: ' + data);
}
});
}
Это заставит jQuery добавлять метку времени к каждому запросу. Если ответ кешируется, он очень быстро вернется, и есть большая вероятность, что именно это и стало причиной вашего бесконечного цикла.
Вы также можете установить минимальную задержку между запросами AJAX:
var lastRequestTime = 0;
function longPollRequest () {
$.ajax({
url : '/test-path',
type : 'GET',
cache : false,
success : function(data, textStatus, jqXHR) {
var delay = ((new Date().getTime()) - lastRequestTime);
if (delay > 1000) {
delay = 0;
} else {
delay = (1000 - delay);
}
setTimeout(longPollRequest, delay);
console.log('Received: ' + data);
}
});
}
Проверяет текущее время относительно времени последнего запроса AJAX. Если это более одной секунды, просто запустите функцию снова без задержки, иначе заставьте код ждать, пока не пройдет секунда между запросами. Возможно, существует более элегантный способ определения переменной delay
, но приведенный выше код должен помочь вам начать работу.