Последнюю проблему решил. Вместо document.write просто добавлял новые элементы через document.createElement
Окончательный код:
var link_index = 0;
var body = document.getElementById('body_id');
function addElement(content)
{
newspan = document.createElement('span');
newspan.innerHTML = content;
body.appendChild(newspan);
}
function writeResult(xmlDoc)
{
forumtitle = xmlDoc.getElementsByTagName("forumtitle")[0].childNodes[0].nodeValue;
titles = xmlDoc.getElementsByTagName("title");
links = xmlDoc.getElementsByTagName("link");
len = titles.length;
if (len == 0) return;
content = '';
content += '<h1>' + forumtitle + '</h1>';
for (i=0;i<len;i++)
{
link = links[i].childNodes[0].nodeValue;
title = titles[i].childNodes[0].nodeValue;
content += '<a target="_blank" href="' + link + '">' + title + '</a><br>';
}
addElement(content);
}
function asyncHandler()
{
if (this.readyState != 4)
return;
if (this.status == 200)
{
writeResult(this.responseXML);
link_index++;
runXMLRequest();
}
}
function runXMLRequest()
{
if (link_index>=linkArray.length)
return;
link = linkArray[link_index];
requestLink = 'controller.php?' + link;
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", requestLink, true);
xmlhttp.onreadystatechange = asyncHandler;
xmlhttp.send();
}
var linkArray = new Array();
// linkArray = [...]
runXMLRequest();