View file style/themes/web/ajax.js

File size: 3.88Kb
var xmlHttp = createXmlHttpRequestObject();
// создает экземпляр объекта XMLHttpRequest
function createXmlHttpRequestObject()
{
// переменная для хранения ссылки на объект XMLHttpRequest
    var xmlHttp;
// эта часть кода должна работать во всех броузерах, за исключением
// IE6 и более старых его версий
    try
    {
// попытаться создать объект XMLHttpRequest
	xmlHttp = new XMLHttpRequest();
    }
    catch (e)
    {
// предполагается, что в качестве броузера используется
// IE6 или более старая его версия
	var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
		"MSXML2.XMLHTTP.5.0",
		"MSXML2.XMLHTTP.4.0",
		"MSXML2.XMLHTTP.3.0",
		"MSXML2.XMLHTTP",
		"Microsoft.XMLHTTP");
	for (var i = 0; i < XmlHttpVersions.length && !xmlHttp; i++)
	{
	    try
	    {
// попытаться создать объект XMLHttpRequest
		xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
	    }
	    catch (e) {
	    }
	}
    }
// вернуть созданный объект или вывести сообщение об ошибке
    if (!xmlHttp)
	alert("Ошибка создания объекта XMLHttpRequest.");
    else
	return xmlHttp;
}
// вызывается для чтения файла с сервера
function process()
{
// продолжать только если в xmlHttp не пустая ссылка
    if (xmlHttp)
    {
// попытаться установить соединение с сервером
	try
	{
	    // инициировать чтение файла с сервера
	    xmlHttp.open("GET", 'http://'+ location.host + "/pages/mail.php?act=ajax" , true);
	    xmlHttp.onreadystatechange = handleRequestStateChange;
	    xmlHttp.send(null);
	}
// вывести сообщение об ошибке в случае неудачи
	catch (e)
	{
	   setTimeout('process()',5000);
	}
    }
}
// эта функция вызывается при изменении состояния запроса HTTP
function handleRequestStateChange()
{
// когда readyState = 4, мы можем прочитать ответ сервера
    if (xmlHttp.readyState == 4)
    {
// продолжать, только если статус HTTP равен «OK»
	if (xmlHttp.status == 200)
	{
	    try
	    {
// обработать ответ, полученный от сервера
		handleServerResponse();
	    }
	    catch (e)
	    {
// вывести сообщение об ошибке
		setTimeout('process()',5000);
	    }
	}
	else
	    {
		setTimeout('process()',5000);
	    }
    }
}
// обрабатывает ответ, полученный от сервера
function handleServerResponse()
{
// прочитать сообщение, полученное от сервера
    var xmlResponse = xmlHttp.responseXML;
// предотвратить потенциально возможные ошибки в IE и Opera
    if (!xmlResponse || !xmlResponse.documentElement)
	throw("Неверная структура XML:\n" + xmlHttp.responseText);
// предотвратить потенциально возможные ошибки в Firefox
    var rootNodeName = xmlResponse.documentElement.nodeName;
    if (rootNodeName == "parsererror")
	throw("Invalid XML structure");
    xmlRoot = xmlResponse.documentElement;
    new_mail = xmlRoot.getElementsByTagName('new_mail').item(0).firstChild.data;
    if (new_mail > 0)
	{
    myMail = document.getElementById("myMail");
// вывести полученный код HTML
    myMail.innerHTML =  '<a href="http://'+ location.host +'/pages/mail.php">Почта ('+ new_mail +')</a>';
	}
setTimeout('process()',5000);
}