я почти разобрался
этот метод делает рекурсивный вызов
и похоже подмену документа освобождая память от своей работы
поэтому переменная в обработчике запроса остаётся не определённой
почему рекурсивный
первый вывод alert(response[0] + ' ' + response[1])
потом вывод в теле вызова xhr()
var xmlhttp
try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } }
if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp = new XMLHttpRequest(); }
var response = [], lastReadyState;
response[1] = document
function xhr()
{
var readyState = xmlhttp.readyState;
if(readyState !== lastReadyState)
{
switch(readyState)
{ case xmlhttp.UNSENT: xmlhttp.open('POST', '/', true);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); break;
case xmlhttp.OPENED: xmlhttp.send("mod=" + encodeURIComponent('sendo') ); break;
//case xmlhttp.HEADERS_RECEIVED: break; //no coments
//case xmlhttp.LOADING: break; //...
case xmlhttp.DONE: response[0] = xmlhttp.response; alert(xmlhttp.response); return;
}
lastReadyState = readyState;
}
setTimeout(xhr);
}
xhr();
alert(response[0] + ' ' + response[1])
при чем если делать собственный вызов без тайм аута переполняется стек
Maximum call stack size exceeded
и такая же ошибка выскакивает если в функцию предавать параметры
например xhr( response[0])