Написал для работы вот такой вот класс:
function AJAXprov()
{
var xmlhttp;
this.provXmlHttp = function()
{
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();
}
return xmlhttp;
}
// this.changeState = function()
// {
// if (this.xmlhttp.readyState == 4)
// {
// if(this.xmlhttp.status == 200)
// {
// //this.setAnsw(this.xmlhttp.responseText);
// eval( "(" + 'this.answServ = ' + this.xmlhttp.responseText + ")");
// }
// }
// }
//функция принимает 4 параметра первый - режим работы false/true (синх/асинх),
//второй - тип запроса (POST/GET)
//третий - параметры для запроса (адрес, по которому нужно отправить запрос
//четвертый - аргумент, содержащий параметры для запроса
this.sendAnsServ = function (modeWork, typeSend, adr, param)
{
//var xmlhttp = this.xmlhttp;
if(typeSend == 'G')
{
adr = adr + '?' + param;
httpP.open('GET', adr, modeWork);
httpP.setRequestHeader('Cache-Control', 'no-cache, must-revalidate');
// httpP.onreadystatechange = this.changeState
httpP.onreadystatechange = function()
{
if (httpP.readyState == 4)
{
if(httpP.status == 200)
{
setAnsw(httpP.responseText);
}
}
}
httpP.send(null);
}
if(typeSend == 'P')
{
httpP.open('POST', adr, modeWork);
httpP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
httpP.setRequestHeader('Cache-Control', 'post-check=0,pre-check=0, false');
httpP.setRequestHeader('Cache-Control', 'max-age=0, false');
httpP.setRequestHeader('Pragma', 'no-cache');
httpP.setRequestHeader('Cache-Control', 'no-cache, must-revalidate');
httpP.send(param);
if(this.xmlhttp.status == 200)
{
setAnsw(httpP.responseText);
}
}
}
}
function test()
{
ttt = new AJAXprov();
httpP = ttt.provXmlHttp();
ttt.sendAnsServ(true, 'P', 'http://localhost/enginenew/router.php', 'p=3,1,test,1');
// document.getElementById('test').innerHTML = answServ;
}
//=======================
//устанавливат ответ сервера
//=======================
function setAnsw (answ)
{
var str = 'answServ = \'' + answ + '\';';
eval(str);
//eval('var obj = ' + d + ';');
}
<a href ="" onclick ="test()">test</a>
<div id="test"></div>
но возникло несколько вопросов.
первый, если назначить на изменение состояния внутреннюю функцию обработчик, то при его изменении и обращении к назначенной функции теряется указатель this. Реально ли вообще назначить свой обработчик события?
второй, при выводе в нужный див происходит странная вещь, ответ с сервера сначала в него выводится, а потом оттуда исчезает, дебагерами оперы и ИЕ в происходящем разобраться не удалось, фаербаг показал след картину, сначала ответ с сервака выводится в див, затем происходит вызов
function onclick(event) {
test();
}
и инфа из дива пропадает. Что происходит я не понимаю. До этого писал подобную функцию и все нормально работало...
третье, почему-то не работает отсылка параметров методом POST не передается параметр "р". Подскажите что происходит.