Мистические приключения AJAX + объекты

 
0
 
JavaScript
ava
error | 22.08.2007, 15:20
Хотел сделать класс, который инкапсулирует xml-дерево с возможностью его асинхронной загрузки.

Пишу (только для IE, чтобы код был свосем короткий и понятный)

<script>
function xmlTree()
{
function loadXml(url, parameters)
{
xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
xmlDoc.onreadystatechange = this.process;
xmlDoc.open( "GET", url+"?"+parameters, true );
xmlDoc.send( null );
}

function process()
{
if (xmlDoc.readyState!=4) { return; }
this.a=10;
alert(this.a);
}


this.a=0;
this.process=process;
this.loadXml=loadXml;
}

myTree=new xmlTree();
myTree.loadXml('ajax.php','');
</script>
<input type="button" onClick="alert(myTree.a)"/>


А дальше начинается та самая мистика. Дерево создается, данные с сервера получены, вызывается process(), выводится alert, там написано 10 - всё как надо.
Но когда потом жму на кнопу - все равно выводится 0.

Причем, если присваивание this.a=10 перенести из process() в loadXml(), то всё в порядке.

Просьба огромная помочь, если кто знает, в чем дело, потому что с ООП-костылями js я только сегодня познакомился.
Comments (3)
ava
BuShaRt | 22.08.2007, 14:35 #
AJAX только под IE? Вот уж точно мистка...
ava
error | 22.08.2007, 15:05 #
Цитата (BuShaRt @ 22.8.2007, 14:35 findReferencedText)
AJAX только под IE? Вот уж точно мистка...


Я написал:
Цитата


только для IE, чтобы код был свосем короткий и понятный


Тебе доставляет удовольствие просматривать лишний код, не имеющий отношения к проблеме? Если так, то это точно мистика.

UPD По задаче:
Проблема была в том, что this в process() обращается не к нужному объекту myTree, а к объекту, для которого он является конструктором.

ava
ksnk | 23.08.2007, 11:26 #
Тут следует с замыканиями помудрить.
Что-то типа

var xxx = this
xmlDoc.onreadystatechange = function(){xxx.process()};


Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  error   BuShaRt   ksnk
advanced
Submit