var req = false; var lines = array(); var logUlElement = false; var logElement = false; var maxLines = 100; var lineNum = 0; if (window.XMLHttpRequest){ req = new XMLHttpRequest(); if (req.overrideMimeType) { req.overrideMimeType('text/xml') } } else if (window.ActiveXObject) { try { req=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e){ try{ req=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e){} } } req.onreadystatechange = function() { if(req.readyState == 4) { if(req.status == 200) { var linesFromXml; if (logUlElement === false) { logUlElement = document.createElement('ul'); logUlElement.setAttibute('id', 'log'); logElement.appendChild(logUlElement); } linesFromXml = req.responseXML.getElementsByTagName('Lines'); for(var i = 0; i < linesFromXml.length; ++i) { var line = linesFromXml[i]; var lineLi = document.createElement('li'); var lineNumberSpan = document.createElement('span'); var lineSpan = document.createElement('span'); lineNum = line.getAttribute('number') * 1; lineNumberSpan.appendChild( document.createTextNode( lineNum + ': ' ) ); lineSpan.appendChild( document.createTextNode( line.childNodes[0].nodeValue ) ); if ( lineNum/2 == Math.round( lineNum/2 ) ) { even = 'even'; } else { even = 'uneven'; } lineLi.setAttribute('class', even); lineLi.appendChild(lineNumberSpan); lineLi.appendChild(lineSpan); lines[lineNum] = lineLi; logUlElement.appendChild(lines[lineNum]); if (lineNum > maxLines) { logUlElement.removeChild(lines[lineNum - maxLines]); } } } else { alert('Error ' + req.status); } } } function fillLog(newLogElement) { logElement = newLogElement setInterval( function () { req.abort(); fillLog(logElement); }, 1 * 1000 ) req.open('GET', '/path/to/log.xml.php?startfrom=' + (lineNum+1) + '&lines=' + (maxLines)); req.send(''); }