Моя обычная функция вызова ajax:
function xhr_new(targetId, url, busyMsg, finishCB)
{
var xhr;
if(busyMsg !== undefined)
document.getElementById(targetId).innerHTML = busyMsg;
try { xhr = new ActiveXObject('Msxml2.XMLHTTP'); }
catch(e)
{
try { xhr = new ActiveXObject('Microsoft.XMLHTTP'); }
catch(e2)
{
try { xhr = new XMLHttpRequest(); }
catch(e3) { xhr = false; }
}
}
xhr.onreadystatechange = function()
{
if(xhr.readyState == 4)
{
if(xhr.status == 200)
{
var target = document.getElementById(targetId)
target.innerHTML = xhr.responseText;
var scriptElements = target.getElementsByTagName("script");
var i;
for(i = 0; i < scriptElements.length; i++)
eval(scriptElements[i].innerHTML);
if(finishCB !== undefined)
finishCB();
}
else
document.getElementById(targetId).innerHTML = 'Error code: ' + xhr.status;
}
};
xhr.open('GET', url, true);
xhr.send(null);
// return xhr;
}
Некоторое объяснение: targetId
- это идентификатор элемента (обычно div), где будет выводиться текст результата вызова ajax. url
- адрес вызова ajax. busyMsg
будет временным текстом в целевом элементе. finishCB
вызывается, когда операция ajax завершена успешно. Как вы видите в xhr.onreadystatechange = function() {...}
все элементы <script>
будут собраны из ответа ajax и будут выполняться один за другим. Кажется, он работает очень хорошо для меня. Два последних параметра являются необязательными.