Если код именно такой, какой приведён здесь, то:
1. С запросами всё в порядке, память
должна нормально со временем освобождаться.
2. xhrTimeout будет падать с ошибкой, ибо не видит никакого "xhr".
Можете попробовать переиспользовать один и тот же запрос, чтоб наверняка:
var infoRequest = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
infoRequest.onreadystatechange = function() {
if (request.readyState !== 4) return;
if (request.status === 200) {
handleSuccess(request.responseXML.getElementsByTagName('sport')[1].firstChild.nodeValue); //обрабатываем ответ
}else{
handleError(request.statusText); // вызвать обработчик ошибки с текстом ответа
}
infoRequest.abort(); // очищаем, если даже одна копия в памяти - много
setTimeout(requestInfo, 3000); // ставим таймаут, только после того как получили ответ, чтоб запросы не наслаивались в случае лагов
}
function handleSuccess(txt){
console.log(txt);
}
function requestInfo() {
infoRequest.open('GET','/infoxml' + Math.random(), true);
infoRequest.send();
};
requestInfo();